C语言版数据结构:[2]链表的建立。

作者:国际小甜 | 创建时间: 2023-04-21
链表其实是线性表的链接存储方式,这种方式下的存储单元可以是连续的,也可以是不连续的。这里我们主要讨论链表的尾插法,头插法和尾插法基本类似。坐标为您分享。...
C语言版数据结构:[2]链表的建立。

操作方法

一、链表的建立分为带头结点的头插法和带头结点的尾插法,第一种方法插入顺序和输出顺序是相反的。第二种方法插入顺序和输出顺序是一致的。这里我们主要介绍尾插法,头插法基本类似。

二、首先对头文件、数据结构、链表结点结构等进行声明。

#include <stdio.h> #include <stdlib.h> #define null 0 typedef struct snode { char *name; char *no; int score[5]; }typedefdata; typedef struct node { typedefdata data; struct node *next; }linklist;

三、首先介绍带头文件的尾插法建立链表。 /*尾插法建立带头结点的单链表*/ linklist *insert_new() { char flag; int x; char *na; char *num; int grade[5]; linklist *head,*rear,*p; head = (struct node*)malloc(sizeof(linklist));//头节点的空间分配 rear = head;//头尾相连进行初始化 do{//do-while语句保证至少进行一次。 printf("name:"); scanf("%s",&na); printf("No.:"); scanf("%s",&num); printf("yuwen_grade:"); scanf("%d",&grade[0]); printf("shuxue_grade:"); scanf("%d",&grade[1]); printf("yingyu_grade:"); scanf("%d",&grade[2]); printf("zhengzhi_grade:"); scanf("%d",&grade[3]); printf("tiyu_grade:"); scanf("%d",&grade[4]); p = (struct node*)malloc(sizeof(linklist)); p->data.name = na; p->data.no = num; for(x=0;x<5;x++) p->data.score[x] = grade[x]; rear->next = p; rear = p; printf("\n\n continue?q for quit!"); getchar();//吸收缓冲区中的'\n'换行符。 至于为什么要用这个可以参考我的另外一篇经验《scanf和getchar执行时被跳过是怎么回事?》有详细介绍。 scanf("%c",&flag); }while(flag != 'q'); rear->next = null; return (head); } /*尾插法建立带头结点的单链表*/

四、头插法建立链表。 头插法其实与尾插法的最大不同是每次新增的节点都是从head处添加,需要修改的就是 for(x=0;x<5;x++) p->data.score[x] = grade[x]; p->next = head->next; head->next = p; printf("\n\n continue?q for quit!");

五、主函数的编写。 int main() { insert_new(); return 0; }

六、测试我们只测试尾插法。

温馨提示

链表的建立并不复杂,需要注意的是内存申请的语句形式p = (struct node*)malloc(sizeof(linklist));
点击展开全文

更多推荐