学无止境,每当我们接触了新的领域就会发现原来自己要学习的还那么多……
这不,小编最近迷上了C语言,但是学习起来也颇为吃力,用了三天时间终于弄懂了单链表的创建与读取,个中滋味实属不易!正所谓"书山有路勤为径,学海无涯苦作舟",不过豁然开朗的那一刻,小编觉得值了,那种快乐是热爱学习的人才能体会的,不知大家有没有同感。好吧,感慨就发到这里,下面小编就给大家分享一段单链表创建与读取的完整代码吧(当然,也包括小编的完整注释),感兴趣的童鞋一起来探讨吧。
该程序用来实现从键盘读取整形数并存入单链表相应结点,0为结束标志。最后再一次读取链表结点数据并输出。
创建一个单链表步骤如下:
· 定义一个单链表;
· 创建一个空的单链表;
· 依次从键盘读入数据链入单链表的表尾。
分析:在程序中使用一个单链表只需定义一个指向头结点的指针,该指针被命名为head。空的单链表是一个只有头结点的单链表。创建一个空的单链表需要申请一个结点,该结点的数据字段不存储有效数据,next指针为空指针,让head指向该结点。依次从键盘读入数据链入单链表的表尾,可由一个循环组成。该循环的每一个循环周期从键盘读入一个整型数,如果读入的不是0,则申请一个结点,将读入的数放入该结点,将结点链到链表的表尾。如果读入的数是0,设置最后一个结点的next为NULL,链表创建完成。为了节省插入时间,我们用一个指针指向链表的最后一个结点。在链表的访问中,我们先用一个指针指向链表的第一个结点看看结点是否存在,如果存在则访问该结点,并让指针指向下一结点;如果不存在则结束访问。
程序代码如下:
#include
#include
struct linkRec{
int data;
struct linkRec *next;
};//定义单链表
int main()
{
int x;//存放从键盘输入的值
struct linkRec *head,*p,*rear;//定义结构体类型的指针,用于指向头结点、当前结点及尾结点
head=rear=(struct linkRec *)malloc(sizeof(struct linkRec));//创建一个空链表(头结点)
//创建链表的其它结点
while(1)
{
scanf("%d",&x);
if(x==0) break;
p=(struct linkRec *)malloc(sizeof(struct linkRec));//申请一个新结点
p->data=x;//将x的值存入新的结点
rear->next=p;//新结点链到头结点(即初始时的尾结点)的下一结点
rear=p;//p结点作为新的表尾
}
rear->next=NULL;//设置rear尾表尾,其后没有结点了
//读取链表
printf("链表的内容为:\n");
p=head->next;//p指向第一个结点
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;//读取数据后使p指向下一个结点
}
printf("\n");
system("pause");//为了观察效果,暂停执行
return 0;
}
好了,下面我们运行一下试试效果。
生成解决方案按成功:
从键盘读取数据并插入链表:
访问链表:
OK!程序运行成功,达到预期效果,你Get到没有。
篇幅有限,不详之处请留言。
文章为小编纯手码,仅供交流学习之用,不足之处敬请批评指正。如果你觉得本文对你有帮助请给我点赞并转发给更多的人!