多语言展示
当前在线:408今日阅读:4今日分享:26

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

链表其实是线性表的链接存储方式,这种方式下的存储单元可以是连续的,也可以是不连续的。这里我们主要讨论链表的尾插法,头插法和尾插法基本类似。坐标为您分享。
方法/步骤
1

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

2

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

3

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

4

三、首先介绍带头文件的尾插法建立链表。/*尾插法建立带头结点的单链表*/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);}/*尾插法建立带头结点的单链表*/

5

四、头插法建立链表。头插法其实与尾插法的最大不同是每次新增的节点都是从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!');

6

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

7

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

注意事项
1

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

2

如果这篇经验对您有帮助,希望您不吝评论、投票、收藏,您的支持是对我最大的鼓励。--坐标X

推荐信息