C语言版数据结构:[2]链表的建立。
链表其实是线性表的链接存储方式,这种方式下的存储单元可以是连续的,也可以是不连续的。这里我们主要讨论链表的尾插法,头插法和尾插法基本类似。坐标为您分享。
操作方法
- 01
一、链表的建立分为带头结点的头插法和带头结点的尾插法,第一种方法插入顺序和输出顺序是相反的。第二种方法插入顺序和输出顺序是一致的。这里我们主要介绍尾插法,头插法基本类似。
- 02
二、首先对头文件、数据结构、链表结点结构等进行声明。
- 03
#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;
- 04
三、首先介绍带头文件的尾插法建立链表。 /*尾插法建立带头结点的单链表*/ 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); } /*尾插法建立带头结点的单链表*/
- 05
四、头插法建立链表。 头插法其实与尾插法的最大不同是每次新增的节点都是从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!");
- 06
五、主函数的编写。 int main() { insert_new(); return 0; }
- 07
六、测试我们只测试尾插法。