gpt4 book ai didi

多个链表可以共享相同的结构吗?

转载 作者:行者123 更新时间:2023-11-30 20:33:29 25 4
gpt4 key购买 nike

我有许多不同不同链表的结构,都有不同的数据类型变量。喜欢:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct scorel {
int no;
struct scorel *rp;
};
struct namel{
char a[10];
struct scorel *rp;
struct namel *dp;
};
void main(){
int i,j,n,m;
struct namel *temp,*head,*end,**s;
struct scorel *tmp,*had,*nd;
clrscr();
printf("enter no of students");
scanf("%d",&n);
end=NULL;
for(i=0;i<n;i++){
temp=(struct namel*)malloc(sizeof(struct namel));
printf("enter name\n");
scanf("%s",temp->a);
temp->rp=NULL;
temp->dp=NULL;
*(s+i)=temp;
if(end==NULL){
end=head=temp;
}
else {
end->dp=temp;
end=temp;
}
printf("enter no of scores");
scanf("%d",&m);
nd=NULL;
for(j=0;j<m;j++){
tmp=(struct scorel*)malloc(sizeof(struct scorel));
printf("enter score\n");
scanf("%d",&tmp->no);
tmp->rp=NULL;
if(nd==NULL){
nd=had=tmp;
temp->rp=tmp;
}
else {
nd->rp=tmp;
nd=tmp;
}
}
}
for(i=0;i<n;i++){
temp=*(s+i);
printf("%s-->",temp->a);
tmp=temp->rp;
while(tmp!=NULL){
printf("%d-->",tmp->no);
tmp=tmp->rp;
}
printf("\n");
}
getch();
}

任何可用的,我可以通过它对不同的不同链接列表使用相同的结构。

我还看到了链表数组,

struct node{
int data;
struct node *next;
}*head[5];

但在此我们只能使用一种类型的变量。我想要每个链接列表都有不同类型的变量。

最佳答案

您可以通过两种方式创建链接列表。

第一种方法是将 next 字段与数据结构一起添加,然后您可以仅在一个列表上访问此结构

struct myData {
struct myData* next;
int a;
char b;
float c;
}

稍后,当您将项目添加到链接列表时,您只需找到最后一个项目并设置 last->next = currentcurrent->next = NULL;.

<小时/>

另一种可能性是将数据结构和列表条目分开

//Linked list structure
struct nodeEntry {
struct nodeEntry* next;
void* data;
};

struct myData {
int a;
char b;
float c;
};

现在,要将数据添加到链接列表中,您可以执行类似以下操作:

nodeEntry* ent = malloc(*ent);
ent->data = pointerToMyData;
ent->next = NULL;

//Now find the last item in linked list and do:
last->next = ent;

在第二种情况下,链表中的每个项目都有自己的 next 对象,这允许您在多个链表中拥有单一的数据结构。

这种方法称为多链表

Doubly Linked list vs Multi-linked list in C/C++

关于多个链表可以共享相同的结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com