初学链表的一些总结

来源:互联网 发布:南京浦口区网络问政 编辑:程序博客网 时间:2024/06/05 10:30

这几天学习了一下链表,经过几天的奋战总算是基本了解了一点单链表。
初学者,可能会有一些不完美的地方。下面是一个简单的单链表。

像许多人说的一样,我们可以把链表比作一列火车;那么每节点就相当于火车的每节车厢,
数据域就相当于火车中的货物或乘客,指针域就相当于两节车厢之间的铰链,连
接着两节车厢。
如图

声明创建一个结构

struct node{   int value;   //数据域,相当于车厢中的货物或人   struct node *next;  //指针域,相当于两节车厢中的铰链};

结构中的数据域用于存放数据,指针域用于节点之间的连接,通过指向下一个节点的地址来实现连接。

创建节点

int main(){   struct node *head,*p,*q;   int count=0;//用于计数,数数到底有多少节车厢;     /*p用于创建节点;   head用于指向p,搬运工;   并通过head->next连接下一个节点,也就是铰链;   q用于存放第一个节点,即车头;*/   head=p=q=NULL; //初始化指针,相当于一开始还没有车厢;   p=(struct node*)mallco(sizeof(struct node)); //给p分配动态空间,也就是车厢的大小;   scanf("%d",&p->value);    //输入数据,将货物或人放进车厢;   head=p;     //将head指向p,搬运工确定车厢;   q=p;     //将q指向p,确定车头;   while(p->value>0)   //假设只要数据域的值不大于0就停止创建新节点;   {         p=(struct node*)mallco(sizeof(struct node)); //给p分配动态空间,创建新节点;         scanf("%d",&p->value);    //输入数据         head->next=p;     //指针域指向p,连接两个节点;         head=p;     //刷新head,使其与p同步;         count++;  //计数变量自增1;   }}

访问并输出链表中的内容

 while(count--) {   printf("%d\n",q->value); //输出第一个节点的数据域,将车厢里面的东西拿出来;   q=q->next;   //指向第二个节点,去下一个车厢; }

完整的代码

 #include<stdio.h> #include<stdlib.h>   //malloc在这个头文件中 //声明创建一个结构 struct node{   int value;   //数据域,相当于车厢中的货物或人   struct node *next;  //指针域,相当于两节车厢中的铰链};int main(){    //创建节点   struct node *head,*p,*q;   int count=0;//用于计数,数数到底有多少节车厢;     /*p用于创建节点;   head用于指向p,搬运工;   并通过head->next连接下一个节点,也就是铰链;   q用于存放第一个节点,即车头;*/   head=p=q=NULL; //初始化指针,相当于一开始还没有车厢;   p=(struct node*)mallco(sizeof(struct node)); //给p分配动态空间,也就是车厢的大小;   scanf("%d",&p->value);    //输入数据,将货物或人放进车厢;   head=p;     //将head指向p,搬运工确定车厢;   q=p;     //将q指向p,确定车头;   while(p->value>0)   //假设只要数据域的值不大于0就停止创建新节点;   {         p=(struct node*)mallco(sizeof(struct node)); //给p分配动态空间,创建新节点;         scanf("%d",&p->value);    //输入数据         head->next=p;     //指针域指向p,连接两个节点;         head=p;     //刷新head,使其与p同步;         count++;  //计数变量自增1;   }   //访问并输出链表中的内容    while(count--) {   printf("%d\n",q->value); //输出第一个节点的数据域,将车厢里面的东西拿出来;   q=q->next;   //指向第二个节点,去下一个车厢; } return 0;}
1 0
原创粉丝点击