介绍
本篇内容主要讲解“C语言怎么实现单链表的基本功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现单链表的基本功能”吧!
1。首先简单了解一下链表的概念:
要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为下一只保存下一个节点的地址)。在实现单链表的操作时,需要用指针来操作。很简单,注释写的很详细,欢迎大家指正哈哈哈哈~之前写的太烂了重新写了一下.....
2。代码展示:
# include & lt; stdio.h> # include & lt; assert.h> # include & lt; stdlib.h> typedef struct  linklist { int 数据; struct linklist *,下一个; }节点;//目录//1 .动态申请节点 节点*,Creatnode (int x);//2 .单链表的尾插 void 阻力(节点* *,plist,, int x);//3 .单链表的打印 void Printlist(节点* *,plist);//4 .单链表尾删 void Popback(节点* *,plist);//5 .单链表的头插 void PushFront(节点* *,plist,, int x);//6 .单链表的头删 void PopFrount(节点* *,plist);//7 .单链表的查找 节点*,Findpos(节点*,plist,, int x);//8。单链表在pos位置之后插入x void Insertlinstafter(节点*,pos, int x);//9。单链表删除pos位置之后的元素 void PopPosAfter(节点*,pos);//10。单链表的销毁 void Destorylist(节点* *,plist);//1 .动态申请节点 节点*,,Creatnode (int x), { 节点*,t =,(节点*)malloc (sizeof(节点)); if (t ==, NULL), { 断言(0); return 零; } else { 时间=t→next 零; x=t→data ; return t; } }//2 .单链表的尾插 void 阻力(节点* *,plist,, int x), { 断言(plist); if (* plist ==, NULL), { * plist =, Creatnode (x); } else { 节点*,p =, * plist; while (p→下一个),{ 时间=p p→下; } 时间=p→next Creatnode (x); } }//3 .单链表的打印 void Printlist(节点* *,plist), { 断言(plist); 节点*,p =*, plist; while (p), { printf (“% d “, p→数据); 时间=p p→下; } }//4 .单链表尾删 void Popback(节点* *,plist), { 断言(plist); if (* plist ==, NULL), { return 零; } 节点*,p =, * plist; 节点*,q =,空; while (p→下一个),{ 时间=q p; 时间=p p→下; } 问→next =零; 自由(p); }//5 .单链表的头插 void PushFront(节点* *,plist,, int x), { 断言(plist); 节点*,t =, Creatnode (x); if (NULL ==, * plist), { * plist =, t; } else { 时间=t→next * plist; * plist =, t; } }//6 .单链表的头删 void PopFrount(节点* *,plist), { 断言(plist); if (plist ==, NULL), { return 零; } else { 节点*,p =, * plist;=* plist p→下; 自由(p); } }//7 .单链表的查找 节点*,Findpos(节点*,plist,, int x), { 节点*,cur =, plist; while (坏蛋),{ if (cur→data ==, x), { return ,坏蛋; } 时间=cur cur→下; } return 零; }//8。单链表在pos位置之后插入x void Insertlinstafter(节点*,pos, int x), { 断言(pos); if (NULL ==, pos), { return ; } 节点*,t =, Creatnode (x); 时间=t→next pos→下; pos→next =, t; }//9。单链表删除pos位置之后的元素 void PopPosAfter(节点*,pos), { 断言(pos); if (pos→next ==, NULL), { 返回; } 其他{ 节点*,p =, pos→下; 时间=pos→next p→下; 自由(p); } }//10。单链表的销毁 void Destorylist(节点* *,plist), { 断言(plist); 节点*,p =, * plist; while (p), {=* plist p→下; 自由(p); 时间=p * plist; } * plist =,空; } , void test1 (), { 节点*,plist=零;//创建头指针 阻力(及plist, 1);//尾插元素 阻力(及plist,, 2); 推迟(及plist, 3); 阻力(及plist, 4); 阻力(及plist,, 5); Printlist(及plist);//打印链表元素,,1,2,3,4,5, printf (“\ n"); Popback(及plist);,//尾删元素,,,,,, PushFront(及plist, 0);//首插元素0,,,, Printlist(及plist);//打印链表,,,0,1,2,3,4 printf (“\ n"); PopFrount(及plist);//首删元素0,, Printlist(及plist);//打印链表,,,1,2,3,4 printf (“\ n"); Findpos (plist, 1);//寻找链表中1的地址,不方便演示,下面会演示 Insertlinstafter (Findpos (plist, 4), 5);//在4后面插入5,用到上面的Findpos函数 Printlist(及plist);//打印链表,,,1,2,3,4,5 printf (“\ n"); PopPosAfter (Findpos (plist, 4));//删除指定位置后面的元素(删除4后面的5) Printlist(及plist);//打印链表,,,,1,2,3,4 printf (“\ n"); Destorylist(及plist);//销毁链表 Printlist(及plist);//打印链表 } void 测试(),{ test1 (); } int main (), { 测试(); return 0; }C语言怎么实现单链表的基本功能