C语言中怎样用链表保存结构体数据(动态数据结构)

作者&投稿:威裴 (若有异议请与网页底部的电邮联系)
C语言中怎样用链表保存结构体数据(动态数据结构)~

链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表。将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t
*next;除了这个指针,list_t
中可以包含其它类型的数据,包括结构体变量。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;

链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表。将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t *next;除了这个指针,list_t 中可以包含其它类型的数据,包括结构体变量。比如:typedef struct {
struct usr_struct data;
list_t *next;
} list_t;

单向链表很简单的,你这几这么就可以了:
struct client{
char account[14]; //账号
char name[10]; //名字
char identity[20]; //身份证号
char address[15]; //地址
long int money; //存款(可存可取)
client* pNext; //指向下一个节点,如果是最后一个节点则为NULL
};

然后,程序里只需要保存第一个节点就行了:
client* head = (client*)malloc(sizeof(client)); //第一个节点这么产生
head->pNext = NULL; //该表只有一个节点,所以第一个也是最后一个,别忘记赋0

插入的时候从头部插入就行了
client* p = (client*)malloc(sizeof(client));
p->pNext = head;
head = p; //将原来的头付给p的pNext指针,然后原来保存头元素的指针用p取代。

遍历链表更加容易了
client* pNode = head;
while (pNode)
{
printf(pNode->account); //比如打印所有客户的帐号
pNode = pNode->pNext; //让pNode指向下一个节点
//如果该节点是最后一个节点,那么pNode就会变成NULL,因为最后一个节点的pNext指针是NULL,while循环就会因为pNode为0而结束
}

保存进文件的时候相当于遍历一边所有的元素,读取的时候则一个一个读取,然后重新插入链表。最后,提醒一下的是别忘记用free释放由malloc分配的内存。

另外,考虑使用C++,可以更好的管理内存,思路也会更清晰。而且,如果是为了应用,根本不需要自己开发链表类,用STL就可以了,STL不仅提供双向链表,还有Map,HashMap等数据结构,非常适合特别大的数据量保存和查找,链表的查找很慢的,找一个数据相当于要把链表全部过一遍。

1.用头插法。因为数据追加和删除比较多,追加的话,头插法可以直接插,用尾插降低了时间效率,删除用两个一样。
2./*结构体定义*/
struct client{
char account[14];
char name[10];
char identity[20];
char address[15];
long int money;
};
/*链表结点定义*/
struct node{
struct client band_inf;
struct node *next;
};
应该把结构体结点定义成链表的成员,这样链表才对。如果像你那样定义的话,完全不用定义结构体,链表就搞定了。因为你在链表里面把结构的成员都又定义了。
3.
1),定义结点:p1=(struct node*)malloc(sizeof(struct node)) ;表示定义一个node型的结点指针
使用,这个要看具体怎么用了。比如说删除searchp,priorp是searchp的前面一个结点,这样写
priorp->next=searchp->next;
delete searchp; 即可
插入newnode在searchp的后面,可以这样:
newnode->next=searchp->next;
searchp->next=newnode;
2)广义的二进制就是文件,你存成什么文件都行。.txt就行。
3)有保存的。if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)。里面有个fwrite就是写入文件,在判断的过程中,能写入文件的就已经写入了。 望采纳。

链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表。将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t *next;除了这个指针,list_t 中可以包含其它类型的数据,包括结构体变量。比如:typedef struct {
struct usr_struct data;
list_t *next;
} list_t;

p1=(struct studinf*)malloc(sizeof(struct studinf)) 表示开辟一段strunt 1.结构体和共用体类型数据的定义方法和引用方法。 2.用指针和结构体构成

厉害


C语言中链表与队列有什么区别?
C语言的链表与队列是两种不同的概念:链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;队列是一种数据结构,其特点是先进先出,后进后出;队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。SQQUEUE的第一个元素elemtype *elem;其实是指向了一个数组,...

C语言单链表节点
2,要插入的节点是不是空指针。代码实现:\/\/向单链表中插入一个节点(插入在链开始处)\/\/输入参数:单链表的头指针和要插入的节点指针 \/\/输出参数:无 \/\/返回值:指向单链表的头指针 singlelist insert(singlelist head,singlelist node){ if(node == null){ return head;} else if(head == n...

求助,C语言怎么将文档中的数据用动态链表按姓名排序。。
fgets(all2,1000,p); \/\/读取文件中的一行到buf中'while(all2[i]!=' '){name2[j]=all2[i];i++;j++;}\/\/将文件的内容保存到name2[ ]里面,如果没有遇到空格 j=0;i++;strcpy(str1->name,name2);\/\/将name2[ ]里面的内容复制到链表里面 while(all2[i]!=' '){xuehao2[j]...

求大大们具体描述下C语言中的结构体和链表(最好能用图表描述)
定义结构体使用struct修饰符,例如:struct test { float a;int b;};2)链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种...

c语言 使用头插发建立单链表存储字符串"abcd" 谢谢
include <stdlib.h> include <stdio.h> \/\/定义结点数据结构 struct node { char cDate;struct node *next;}Node;\/\/建立空链表 void initlist(*p){ p=NULL;} \/\/插入数据 void creatlist(Node *L; char a[4]){ L= (Node *)malloc(sizeof(Node));L->next = NULL; \/\/生成头结点 ...

数组和链表
但我们还是要遵守佳实践,别这么做,大多数语言都没这个能力)。    名词解析:1、 线性表 :线性表就是数据排成一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队 列、栈等也是线性表结构。与它相对立的概念是非线性表,比如 二叉树、堆、图。

链表是什么!那个编程语言中有的,和数组有什么区别
一、主体不同 1、链表:是一种物理存储单元上非连续、非顺序的存储结构。2、数组:是有序的元素序列。是用于储存多个相同类型数据的集合。二、特点不同 1、链表:由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。2、数组:是在程序设计中,为了处理方便, 把具有相同类型的...

用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完...
这是个很简单的链表创建和输出 include<stdio.h> include<stdlib.h> typedef struct linkednode { char data;struct linkednode *next;}node,*link_list;\/\/链表节点的结构及重命名 link_list creat()\/\/创建一个链表返回类型是链表的首地址 { link_list L;node *p1,*p2;char data;L=(node*)...

C语言中如何实现链表反转并打印?
print_node_list(head); \/\/ 原始链表\/ head = reverse(head);print_node_list(head); \/\/ 反转后的链表\/ free_node_list(head);return 0;}\/以上就是C语言中`reverse`函数的巧妙用法,它展示了链表操作的灵活性,希望这些代码片段能帮助你在编程旅程中编写出更优雅的链表算法。继续探索,让代码...

用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别...
\/ 用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩 \/ \/\/FileName: stuinfo.c include <stdio.h> include <stdlib.h> include <string.h> define SERIALLEN 20 define COURSENUM 3 typedef struct { char course[SERIALLEN];float score;}...

沈阳市18355926193: C语言中怎样用链表保存结构体数据(动态数据结构) -
常胃巴柳: 链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表.将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t *next;除了这个指针,list_t 中可以包含其它类型的数据,包括结构体变量.比如:typedef struct { struct usr_struct data; list_t *next; } list_t;

沈阳市18355926193: C语言 怎么把结构体数组写入链表? -
常胃巴柳: 1.用头插法.因为数据追加和删除比较多,追加的话,头插法可以直接插,用尾插降低了时间效率,删除用两个一样. 2./*结构体定义*/ struct client{ char account[14]; char name[10]; char identity[20]; char address[15]; long int money; }; /*链表...

沈阳市18355926193: c语言中怎么把打开的文本存入链表中啊 -
常胃巴柳: 把你链表中的结构体保存到文本,下次打开以后一次读文本的内容到结构体中,然后把这些结构体加入链表就可以了.如果文本是事先给你的,你可以先了解文件中数据的属性,比如一个结构体中有哪些类型,然后按这些类型创建结构体,然后加入链表即可

沈阳市18355926193: C语言 输入链表并保存到文件里 -
常胃巴柳: struct student *p;将p插入链表后FILE*fp;fp=("name","wb");fwrite(p, sizeof(struct student),1 , fp);

沈阳市18355926193: c语言线性表链式结构中如何存储数据 -
常胃巴柳: 对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即(*L).elem;对于LinkList *L:L是指向定义的Node结构体指针的指...

沈阳市18355926193: 如何用C语言实现简单的链式存储结构 -
常胃巴柳: 使用结构体:typedef struct node{ int data; struct node* next; }Node;就可以实现,以上是一个单链表的节点元素,每个节点的next指向下一个节点,就可以实现链式存储了.遇到其他类似的问题,可以根据需要设置相应的指针域.

沈阳市18355926193: c语言如何用动态链表储存数据??
常胃巴柳: 单链表,双链表,堆 都可以,不过看您要存储什么数据 以单链表为例: 定义一个节点结构 typedef struct LNode{ ElementType date; struct Lnode *next; }Lnode; 然后用malloc开辟需要的节点空间,把数据存进去就可以了 p = (Lnode) malloc (sizeof(Lnode)); //开辟一个节点,p为所开辟空间的指针 至于查找,从头节点开始q = p->next ;一个个查就行了.

沈阳市18355926193: C语言中如何以链表的形式存储信息,并把信息以字典方式存储在文件中? -
常胃巴柳: 这个就是链表最基本的一种,只不过结构体多了点内容,用单项链表即可实现.建立个单向链表结构体,把这些内容加进去就行了,至于链表的排序,插入,删除都是最基本的应用,多看看C语音,应该问题不大.

沈阳市18355926193: C语言中如何将一个链表保存为文件? -
常胃巴柳: 第一步:创建文件 比如说 file *fp=fopen(……); 第二步:写一个循环,把链表的节点一个一个写进文件里. 第三部:记得关闭文件- -

沈阳市18355926193: 在C语言中怎么把单链表的结构数据写入文件和读取出来啊? -
常胃巴柳: int save_LinkList(LinkList head) {FILE *stu_database;Node *p=head->next; // 为什么一开始就取了next,// 难道头结点里面不是普通的信息,而是其他的信息;否则,就应该直接 p= head;int cnt_datas; // 这个变量似乎没用啊if(stu_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网