链表概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
链表
一.C语言链表
1.链表是一种常见的重要的数据结构;它是动态地进行存储分配的一种结构.
2.建立简单的静态链表
建立一个如图所示的简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。
3.C语言实现动态链表
所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。链表的建立一般是指先建立一个空链表,而后一个个地将元素插在队尾。
4.链表与数组的比较
5.链表销毁
实现链表的清空,其关键判断是,结构体的pnext指针是否指向null。
根据这个原理就很容易写出代码了,如下图
二.静态数组和动态数组的优缺点
1、链表和数组的区别:
数组:内存中按照顺序存放;寻址容易;大小固定;删除时需要很多移动;静态数组无法增加,动态数组需要很多移动。
链表:内存中按照指针链式存放;寻址需要循环;大小可变;查找时需要很多移动;删除,插入非常便捷
2、静态和动态数组的优缺点
3、静态数组。
1)一旦分配内存就固定了长度,不可以再增加了。
2)外部的内存可以访问,但是外部内存可能被使用,也可能没有被使用。
3)没有使用的清空下,越界偶尔会成功,还是会被回收利用。
4)已经使用,越界比如失败
5)静态数组的删除:其原理是删除要删除的元素后,其后面的每一个都需要向前移动一个
6)静态数组不可以增加,
4.动态数组的优点:可以增加元素,动态数组的创建,其在需要的地方新分配内存,动态数组的查询和静态数组相同
5.动态数组的删除,原理跟静态数组相同,不同点是记得要释放内存。
6.动态数组的增加,这是与静态数组最大的不同。
(1)插入到尾部
(2)插入到中间情况:
7.总结动态数组的特点:
三.实现链表排序以及删除所有节点
1. 链表删除所有节点
删除几乎可以看成是结点插入的逆操作,将到换一个顺序即可:
如果删除的是第1个数据结点,即从到,则应使head指针指向E1,同时释放掉Einsert 申请的动态内存。
如果删除的是中间结点,即从到,则只需让E2->next指向Einsert->next,同时,释放掉Einsert占据的动态内存。
如果删除的尾结点,即从到,只需让E1->next为NULL,同时释放掉Einsert占据的动
态内存。
2.实现链表的清空,
四.链表排序讲解
我们按照输入的要求实现不同的排序,当输入>时,按照从大到小排序;当输入<时实现从小到大排序。
由于链表不能随便访问的特性,决定了链表的排序适合冒泡排序法,不适合选择排序等从大到小排序其关键代码如下所示: