这几天学习了一下链表,经过几天的奋战总算是基本了解了一点单链表。
初学者,可能会有一些不完美的地方。下面是一个简单的单链表。
像许多人说的一样,我们可以把链表比作一列火车;那么每节点就相当于火车的每节车厢,
数据域就相当于火车中的货物或乘客,指针域就相当于两节车厢之间的铰链,连
接着两节车厢。
声明创建一个结构
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;
}