这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html

ZT 链表逆序http://www.cnblogs.com/jeanschen/p/3538966.html

C语言链表操作(新增单向链表的逆序建立)

分类: C/C++2011-09-17 22:05 1017人阅读 评论(0) 收藏 举报
众所周知,链表是数据结构的基础,掌握链表很重要http://blog.csdn.net/liushuaikobe/article/details/6785964

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct NODE
  4. {
  5. int e;
  6. struct NODE *next;
  7. }node, *LinkList;
  8. LinkList build_linklist()
  9. {
  10. FILE *fp;
  11. if ((fp=fopen("number.txt","r"))==NULL)
  12. {
  13. printf("Can not open the file!");
  14. exit (1);
  15. }
  16. int t;
  17. LinkList r,p,head=NULL;
  18. while (fscanf(fp,"%d",&t)>0)
  19. {
  20. p=(LinkList)malloc(sizeof(node));
  21. p->e=t;
  22. p->next=NULL;
  23. if (!head)
  24. head=p;
  25. else
  26. r->next=p;
  27. r=p;
  28. }
  29. return head;
  30. }
  31. void search(LinkList head,int toSearch)
  32. {
  33. int count=0;
  34. int flag=0;
  35. LinkList r=head;
  36. while (r!=NULL)
  37. {
  38. count++;
  39. if (r->e==toSearch)
  40. {
  41. printf("已经找到该元素,在第%d个位置\n",count);
  42. flag=1;
  43. break;
  44. }
  45. r=r->next;
  46. }
  47. if (!flag)
  48. printf("没有找到该元素!\n");
  49. }
  50. void del(LinkList *head,int toDel)
  51. {
  52. if (!(*head))
  53. {
  54. printf("请先创建链表!\n");
  55. return ;
  56. }
  57. LinkList r=*head;
  58. LinkList p=NULL;
  59. int flag=0;
  60. while (r!=NULL)
  61. {
  62. if ((r==*head)&&(r->e==toDel))
  63. {
  64. (*head)=(*head)->next;
  65. flag=1;
  66. break;
  67. }
  68. if ((r!=*head)&&(r->e==toDel))
  69. {
  70. flag=1;
  71. for (p=*head;p!=NULL;p=p->next)
  72. {
  73. if (p->next==r)
  74. {
  75. break;
  76. }
  77. }
  78. p->next=r->next;
  79. free(r);
  80. break;
  81. }
  82. r=r->next;
  83. }
  84. if (!flag)
  85. printf("未找到该元素!\n");
  86. }
  87. void insert(LinkList head,int n,int toInsert)
  88. {
  89. if (!head)
  90. {
  91. printf("请先创建链表!");
  92. return ;
  93. }
  94. int count=0;
  95. LinkList p=head;
  96. while (p!=NULL)
  97. {
  98. if ((count++)==n)
  99. {
  100. LinkList r=(LinkList)malloc(sizeof(node));
  101. r->e=toInsert;
  102. r->next=p->next;
  103. p->next=r;
  104. break;
  105. }
  106. p=p->next;
  107. }
  108. }
  109. int getLengh(LinkList head)
  110. {
  111. LinkList p=head;
  112. int i=0;
  113. while (p!=NULL)
  114. {
  115. i++;
  116. p=p->next;
  117. }
  118. return i;
  119. }
  120. void show(LinkList head)
  121. {
  122. LinkList p=head;
  123. while (p!=NULL)
  124. {
  125. printf("%d  ",p->e);
  126. p=p->next;
  127. }
  128. printf("\n");
  129. }
  130. void rebuild(LinkList *head)
  131. {
  132. LinkList r,p;
  133. p=(*head)->next;
  134. r=p->next;
  135. (*head)->next=NULL;
  136. while(p!=NULL)
  137. {
  138. p->next=*head;
  139. *head=p;
  140. p=r;
  141. if (r==NULL)
  142. continue;
  143. else
  144. r=r->next;
  145. }
  146. }
  147. void sort_linklist(LinkList head)
  148. {
  149. LinkList r,p;
  150. int temp=0;
  151. for (r=head;r->next!=NULL;r=r->next)
  152. for (p=r->next;p!=NULL;p=p->next)
  153. if ((r->e)>(p->e))
  154. {
  155. temp=r->e;
  156. r->e=p->e;
  157. p->e=temp;
  158. }
  159. }
  160. int main()
  161. {
  162. LinkList head=build_linklist();
  163. printf("链表已建立!原链表:\n");
  164. show(head);
  165. sort_linklist(head);
  166. printf("链表已经按照从小到大的顺序排好!排序后:\n");
  167. show(head);
  168. printf("\n");
  169. int c=0;
  170. while (1)
  171. {
  172. printf("1.查找指定元素\n");
  173. printf("2.插入一个给定元素\n");
  174. printf("3.删除一个指定元素\n");
  175. printf("4.统计链表的长度\n");
  176. printf("5.输出线性链表\n");
  177. printf("6.实现安逆序链表的重建\n");
  178. printf("请选择:");
  179. scanf("%d",&c);
  180. switch (c)
  181. {
  182. case 1:
  183. {
  184. printf("请输入要查找的元素:");
  185. int t;
  186. scanf("%d",&t);
  187. search(head,t);
  188. printf("\n");
  189. break;
  190. }
  191. case 2:
  192. {
  193. printf("请输入要插入的元素的值:");
  194. int toi;
  195. scanf("%d",&toi);
  196. printf("请输入要插入的位置:");
  197. int position;
  198. scanf("%d",&position);
  199. insert(head,position,toi);
  200. printf("\n");
  201. break;
  202. }
  203. case 3:
  204. {
  205. printf("请输入要删除的元素的值:");
  206. int tod;
  207. scanf("%d",&tod);
  208. del(&head,tod);
  209. printf("\n");
  210. break;
  211. }
  212. case 4:
  213. {
  214. printf("链表的长度是:%d\n",getLengh(head));
  215. printf("\n");
  216. break;
  217. }
  218. case 5:
  219. {
  220. show(head);
  221. printf("\n");
  222. break;
  223. }
  224. case 6:
  225. {
  226. rebuild(&head);
  227. show(head);
  228. printf("\n");
  229. break;
  230. }
  231. default:
  232. {
  233. exit(0);
  234. }
  235. }
  236. }
  237. return 0;
  238. }

ZT C语言链表操作(新增单向链表的逆序建立)的更多相关文章

  1. 复习下C 链表操作(单向链表)

    Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不 ...

  2. C语言链表:逆序建立单链表

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h> #define LEN sizeof( ...

  3. SDUT OJ 数据结构实验之链表二:逆序建立链表

    数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  4. 《程序员代码面试指南》第二章 链表问题 将单链表每K个节点之间逆序

    样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Au ...

  5. SDUT-2117_数据结构实验之链表二:逆序建立链表

    数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入整数个数N,再输入N个整数,按照 ...

  6. 复习下C 链表操作(单向循环链表、查找循环节点)

    循环链表 稍复杂点. 肯能会有0 或 6 字型的单向循环链表.  接下来创建 单向循环链表 并 查找单向循环链表中的循环节点. 这里已6字型单向循环链表为例. //创建 循环链表 Student * ...

  7. C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。

    // //  main.c //  dynamic_link_list // //  Created by ma c on 15/8/5. //  Copyright (c) 2015. All ri ...

  8. C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码

    实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...

  9. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

随机推荐

  1. mysql/mariadb 数据库配置

    1.  启动mariadb systemctl start mariadb 2. 设置开机启动mariadb systemctl enable mariadb 一.修改用户密码,以root为例 1. ...

  2. 开始使用Newbe.Pct-Web自动化测试

    前篇介绍了,使用 Newbe.Pct 之前的准备工作.本篇将开始介绍如何使用本项目运行第一个测试用例. 阅前语 从本篇开始,读者将会接触到使用一些代码.希望读者不必纠结于语法本身.出现代码的地方都会伴 ...

  3. Spring4 MVC ContentNegotiatingViewResolver多种输出格式实

    前段时间在一个项目里面发现,针对Excel的处理没有一个公用的视图,来个下载的需求就要自己去写一堆POI的东西,终于有一天给我也来了几个,还是按照以前的方式来写,写多了真心想吐,后面想想还是有必要整个 ...

  4. Android 控件:使用下拉列表框--Spinner

    ---恢复内容开始--- 一.前段代码 <Spinner android:id="@+id/spin" android:paddingTop="10px" ...

  5. 基础拾遗----RabbitMQ

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  6. TextView显示HTML文本时<IMG>标签指定图片的显示处理

    TextView显示文本时是支持一些HTML标签的(具体支持那些标签会在下面附录列出),不会需要先用HTML的static方法fromHtml来转换一下. Spanned text = Html.fr ...

  7. 小tip:FireFox下文本框/域百分比padding bug解决——张鑫旭

    一.问题描述 我是流体布局控,经常会遇到文本框以及文本域宽度100%自适应显示的情况. 如下效果图: 在窄屏下,上面的文本框宽度也要跟着外部宽度变小. 难点对于文本框或者文本域,光标最好距离左侧边缘有 ...

  8. [js常用]连续播放音频

    许多音频连续播放.有的时候音频过大会分成多个音频.播放的时候需要连续播放 <!DOCTYPE HTML> <html> <head> <meta charse ...

  9. jQuery源码学习笔记一

    学习jQuery源码,我主要是通过妙味视频上学习的.这里将所有的源码分析,还有一些自己弄懂过程中的方法及示例整理出来,供大家参考. 我用的jquery v2.0.3版本. var rootjQuery ...

  10. Fatal error: Call to undefined function curl_init()解决办法

    问题描述: 在Windows SERVER 2012RC 64 bit OS, php 5.6.3的环境下,搭建好了php运行环境.但是在调用 curl_init() 方法时却报错了. 检查了一下,p ...