C语言怎么实现单链表的基本功能

  介绍

本篇内容主要讲解“C语言怎么实现单链表的基本功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现单链表的基本功能”吧!

1。首先简单了解一下链表的概念:

 C语言怎么实现单链表的基本功能

要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为下一只保存下一个节点的地址)。在实现单链表的操作时,需要用指针来操作。很简单,注释写的很详细,欢迎大家指正哈哈哈哈~之前写的太烂了重新写了一下.....

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语言怎么实现单链表的基本功能