精选文章 单链表的操作

单链表的操作

作者:weixin_33991418 时间: 2021-02-07 02:40:51
weixin_33991418 2021-02-07 02:40:51
【摘要】单链表的操作包括:创建单链表、输出单链表长度 、输出单链表、删除节点、插入节点、单链表排序、单链表逆置。虽然思路都很简单,但是真写程序类运行时就遇到各种错误。
 
#include  using namespace std;   struct node  {      int data;      node *next;  };   //建立单链表  node * creat()  {   ...

单链表的操作包括:创建单链表、输出单链表长度 、输出单链表、删除节点、插入节点、单链表排序、单链表逆置。虽然思路都很简单,但是真写程序类运行时就遇到各种错误。

 

  1. #include  
  2. using namespace std;  
  3.  
  4. struct node  
  5. {  
  6. int data;  
  7. node *next;  
  8. };  
  9.  
  10. //建立单链表  
  11. node * creat()  
  12. {  
  13. node *head;  
  14. head=(node *)malloc(sizeof(node));  
  15. node *p=head;//保存下头  
  16. while(1)  
  17. {
  18. int x;  
  19. scanf("%d",&x);  
  20. if(x==0)  
  21. break;  
  22. node *s=(node *)malloc(sizeof(node));//增加一个节点  
  23. s->data=x;  
  24. p->next=s;  
  25. p=s;  
  26. }  
  27. head=head->next;  
  28. p->next=NULL;//注意结尾赋空  
  29. return head;  
  30. }  
  31.  
  32. //求单链表长度  
  33. int length(node * head)  
  34. {  
  35. node *p=head;  
  36. int len=1;  
  37. while(p->next!=NULL)  
  38. {  
  39. p=p->next;  
  40. len++;  
  41. }  
  42. return len;  
  43. }  
  44.  
  45. //打印单链表  
  46. void print(node *head)  
  47. {  
  48. node *p=head;  
  49. while(p!=NULL)  
  50. {  
  51. printf("%d  ",p->data);  
  52. p=p->next;  
  53.  
  54. }  
  55. printf("\n");  
  56. }  
  57.  
  58. //删除单链表中的某元素  
  59. node *del(node *head,int num)  
  60. {  
  61. node *p1,*p2;  
  62. p1=head;  
  63. while(p1->next!=NULL)  
  64. {  
  65. if(p1->data==num)  
  66. break;  
  67. else 
  68. {  
  69. p2=p1;  
  70. p1=p1->next;  
  71. }  
  72. }  
  73. if(p1->data==num)  
  74. {  
  75. if(p1==head)  
  76. {  
  77. head=p1->next;  
  78. free(p1);  
  79. }  
  80. else 
  81. {  
  82. p2->next=p1->next;  
  83. free(p1);  
  84. }  
  85. }  
  86. else 
  87. printf("%d cannot find",num);  
  88. return head;  
  89. }  
  90.  
  91.  
  92. //单链表插入元素   原表升序排列  
  93. node *insert(node *head,int num)  
  94. {  
  95. node *p1,*p2;  
  96. p1=head;  
  97. node *in=(node *)malloc(sizeof(node));  
  98. in->data=num;  
  99. while(p1->next!=NULL)  
  100. {  
  101. if(p1->data<>//注意无等号  <>
  102. {  
  103. p2=p1;  
  104. p1=p1->next;  
  105. }  
  106. else   
  107. break;  
  108. }  
  109. if(head==p1)  
  110. {  
  111. in->next=p1;  
  112. head=in;  
  113. }  
  114. if(p1->data>=num)//注意有等号  
  115. {  
  116. in->next=p2->next;p2->next=in;  
  117. }  
  118. else 
  119. {  
  120. p1->next=in;  
  121. in->next=NULL;  
  122.  
  123. }  
  124. return head;  
  125. }  
  126.  
  127. //单链表升序排序  
  128. node *sort(node *head)  
  129. {  
  130. node *p=head;  
  131. int n=length(head);  
  132. for(int i=1;i<>//注意i从1开始  <>
  133. {  
  134. p=head;  
  135. for(int j=0;j
  136. {  
  137. if(p->data>p->next->data)  
  138. {  
  139. int tmp=p->data;  
  140. p->data=p->next->data;  
  141. p->next->data=tmp;  
  142. }  
  143. p=p->next;  
  144. }  
  145. }  
  146. return head;  
  147. }  
  148.  
  149. //单链表逆置  
  150. node *reserve(node *head)  
  151. {  
  152. node *p1=head;  
  153. node *p2=head->next;  
  154. while(p2)  
  155. {  
  156. node *p3=p2->next;//p3存下来  
  157. p2->next=p1;  
  158. p1=p2;  
  159. p2=p3;  
  160. }  
  161. head->next=NULL;  
  162. head=p1;  
  163. return head;  
  164. }  
  165. int main()  
  166. {  
  167. node *head=creat();  
  168. print(head);  
  169. int n=length(head);  
  170. printf("%d\n",n);  
  171. del(head,4);  
  172. print(head);  
  173. sort(head);  
  174. print(head);  
  175. insert(head,5);  
  176. print(head);  
  177. node *hed=reserve(head);  
  178. print(hed);  
  179. return 1;  
  180.  

 

单链表的操作1

 

转载于:https://blog.51cto.com/buptdtt/792786

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:PLSQL提交请求集

下一篇:认识HTML5的WebSocket 认识HTML5的WebSocket

您可能感兴趣

  • 一个统一的链表结构

    这是在Linux下面最常用的一个统一的链表结构,Linux就是用这个结构将所有的Driver、Device什么的都分别串在一起。我觉得写得非常好,大家来看一看。 ----------------------------------------------------------------------------------------------------- #ifndef _LINUX...

  • 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换

    使用的存储过程简介1、sp_addlinkedserver --- 为SQL SERVER 添加一个Link Server2、sp_addlinkedsrvlogin --- 为Link Server 添加一个 Login3、sp_droplinkedsrvlogin --- 删除Link Server的Login4、sp_dropserver  --- 删除Link Server详细请参考...

  • 谈asp 与SQL server互操作的时间处理

    作者:hanbo你在编程时一定碰到过时间触发的事件,在VB中有timer控件,而asp中没有,假如你要不停地查询数据库来等待一返回结果的话,我想你一定知道,他会耗费大量的cpu资源,如果和我所说的一样,而你又没更好的解决办法,按我说的去做:set cnn=server.createobject("adodb.connection")waittime="waitfor delay '00:00...

  • VB千里行-操作Word与Excel

    本文将告诉你如何使用VB代码连接Office应用程序,并简要接触一下在文件中输入数据的方法。实际上,在VB中用代码与Word和Excel进行会话并控制它们,是可行的。但是请注意,首先需要在机器上安装office应用程序,才能在VB代码中存取它们的对象。   下面就是一些例子,告诉你如何与这些程序会话,并控制它们。 Option Explicit Dim xlsApp As Excel.Ap...

  • JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.

    使用哈希表操作数据库的例子 // * This code is distributed in the hope that it will be useful, *// * but WITHOUT ANY WARRANTY; without even the implied warranty of *// * MERCHANTABILITY or FITNESS FOR A PARTICUL...

  • 一组有用的操作Excel的函数

    在用VB做程序的时候,它本身的报表并不太好使用,因此应用Excel输出数据,是一个好方法,以下是一组操纵Excel的函数据,希望能帮助大家. 'Excel VBA控制函数 'Write By WeiHua 2000.10.12   '检测文件Function CheckFile(ByVal strFile As String) As BooleanDim FileXls As ObjectS...

  • 如何进行文件操作:取得文件名 :打开文件 :移动文件指针.........

    { CString FilePathName; CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框 if(dlg.DoModal()==IDOK) FilePathName=dlg.GetPathName(); } 相关信息:CFileDialog 用于取文件名的几个成员函数: 假如选择的文件是C:/WINDOWS/TEST.EXE ...

  • Java语言入门 -- 第九章 Java的输入输出操作

    第九章 Java的输入输出操作            9.1 Java 输 入 输 出 流 所 有 的 程 序 语 言 都 提 ?copy; 与 本 机 文 件 系 统 交 互 的 方式;Java也 不 例 外。 我 们 将 看 看Java是 怎 样 处 理 标 准 文 件 输 入输 出 的(包 括stdin,stout,stderr)。 当 你 在 网 络 上 开 发 小 程 序 时,...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
单链表的操作介绍:华为云为您免费提供单链表的操作在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多单链表的操作的相关内容。| 移动地址: 单链表的操作 | 写博客