热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单链表实现(整型结点)

1*2*LinkNode.c3*4*Createdon:Jan14,20145*Author:root6*7#include8#include9#include10typede


1 /*
2 * LinkNode.c
3 *
4 * Created on: Jan 14, 2014
5 * Author: root
6 */
7 #include
8 #include
9 #include
10 typedef struct node
11 {
12 int num;
13 struct node *next;
14 }Node,*pNode;
15
16 pNode create();
17 void printList(pNode pHead);
18 int InsertNode(pNode pHead,int front,int data);
19 int DeleteNode(pNode pHead,int pos);
20 int LengthList(pNode pHead);
21 void Sort_List(pNode pHead);
22 int main()
23 {
24
25 pNode pHead = NULL;
26 int data;
27 int front;
28 int choose;
29 int return_val;
30 pHead=create();
31 printf("你输入的数据是,\n");
32 int length;
33 length = LengthList(pHead);
34 printf("(长度为%d的单链表):\n",length);
35 printList(pHead);
36 while(1)
37 {
38 printf("是否还要进行如下操作:\n");
39 printf("1.插入数据 2.删除数据 3.修改数据 4.链表排序 5.退出\n");
40 scanf("%d",&choose);
41
42 switch(choose)
43 {
44 case 1:
45 {
46 printf("请输入要在第几个节点前插入数据:");
47 scanf("%d",&front);
48 if(front>length)
49 {
50 frOnt= length;
51 printf("Warning:输入结点位置大于链表长度,默认在表尾部添加!\n");
52 }
53 printf("请输入要插入的数据:");
54 scanf("%d",&data);
55 if(InsertNode(pHead,front,data)==1)
56 {
57 printf("插入成功\n插入后的数据是:\n");
58 printList(pHead);
59 }else
60 {
61 printf("插入失败\n");
62 }
63 break;
64 }
65 case 2:
66 {
67 printf("请输入要删除第几个节点的数据:");
68 scanf("%d",&front);
69 if(front>length)
70 {
71 frOnt=length;
72 printf("Warning:输入结点位置大于链表长度,默认删除表最后一个结点!\n");
73 }
74 return_val = DeleteNode(pHead,front);
75 if(return_val==0)
76 {
77 printf("删除失败。\n");
78 }else
79 {
80 printf("删除成功。删除的元素是:%d\n",return_val);
81 }
82 printf("操作完成后的数据是:");
83 printList(pHead);
84 break;
85 }
86 case 3:
87 {
88 printf("暂时没有做这个功能!\n");
89 break;
90 }
91 case 4:
92 {
93 Sort_List(pHead);
94 break;
95 }
96 case 5:
97 {
98 exit(1);
99 }
100 return 0;
101 }
102
103 }
104
105 return 0;
106 }
107
108 pNode create()
109 {
110 int i;
111 int len;
112 int val;
113 pNode pHead = (pNode)malloc(sizeof(struct node));
114 pNode pTail = pHead;
115 pTail->next = NULL;
116 printf("请输入节点个数:");
117 scanf("%d",&len);
118 for(i=0;i)
119 {
120 printf("第 %d 个节点的数值:",i+1);
121 scanf("%d",&val);
122 pNode pNew = (pNode)malloc(sizeof(Node));
123 pNew->num = val;
124 /*
125 * 有序的
126 * 1.将尾节点的next指针指向新节点
127 * 2.然后把新节点next指针设置为空
128 * 3. 最后将新节点作为尾节点
129 */
130 pTail->next=pNew;
131 pNew->next=NULL;
132 pTail = pNew;
133 }
134 return pHead;
135 }
136
137 void printList(pNode pHead)
138 {
139 pNode p = pHead->next;
140 while(p!=NULL)
141 {
142 printf("%d\n",p->num);
143 p=p->next;
144 }
145 printf("\n");
146 }
147 int InsertNode(pNode pHead,int front,int data)
148 {
149 int i = 0;
150 pNode _node = pHead;
151 pNode pSwap ;
152
153 if((front<1) || (_node==NULL))
154 {
155 printf("error:List is NULL or front<1");
156 return -1;
157 exit(0);
158 }
159 while(i1)
160 {
161 _node = _node->next;
162 ++i;
163 }
164 pNode pNew = (pNode)malloc(sizeof(Node));
165
166 pNew->num=data;
167 pSwap = _node->next;
168 _node->next = pNew;
169 pNew->next = pSwap;
170
171 return 1;
172 }
173
174 int DeleteNode(pNode pHead,int pos)
175 {
176 int i=0;
177 int data;
178 pNode _node =pHead;
179 pNode pSwap ;
180 if((pos <1) && (NULL == _node->next))
181 {
182 printf("failed to delete ! \n");
183 return 0;
184 }
185 while(i 1)
186 {
187 _node = _node->next;
188 ++i;
189 }
190 pSwap = _node->next;
191 data = pSwap->num;
192 _node->next = _node->next->next;
193 free(pSwap);
194 return data;
195 }
196
197 int LengthList(pNode pHead)
198 {
199 int length = 0;
200 pNode temp = pHead->next;
201 while(temp!=NULL)
202 {
203 temp=temp->next;
204 length++;
205 }
206 return length;
207 }
208
209 void Sort_List(pNode pHead)
210 {
211 int i , j;
212 int swap ;
213 int len=LengthList(pHead);
214 pNode m,n;
215 for(i=0,m=pHead->next;i1;i++,m=m->next)
216 {
217 for(j=i+1,n=m->next;jnext)
218 {
219 if(m->num > n->num)
220 {
221 swap = m->num;
222 m->num = n->num;
223 n->num = swap;
224 }
225 }
226 }
227 printf("排序完后结果为:\n");
228 printList(pHead);
229 }


推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
桃花源主ITXB
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有