7.2链表1-11节-c学习

阅读次数: 3,440

  • A+
所属分类:C语言 语言学习

链表是一种常见的重要的数据结构;它是动态地进行存储分配的一种结构.

7.2链表1-11节-c学习

7.2.2C语言实现简单链表

简单链表:

struct Student

{  

int num;

  float score;

  struct Student *next;

}a,b,c;

建立简单的静态链表

 建立一个如图所示的简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。

7.2链表1-11节-c学习

所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。

7.2.6创建链表过程

链表的建立一般是指先建立一个空链表,而后一个个地将元素插在队尾。

一、C语言实现简单链表代码

7.2链表1-11节-c学习

(1)静态模式结构体如下:

7.2链表1-11节-c学习

(2)动态模式结构体如下:

1、方法一

7.2链表1-11节-c学习
  • 方法二
7.2链表1-11节-c学习

计算机内存管理原理:

7.2链表1-11节-c学习

二、 画图讲解链表的原理:

7.2链表1-11节-c学习
  1. 简单链表创建
7.2链表1-11节-c学习

Main()函数内部程序代码:

7.2链表1-11节-c学习
7.2链表1-11节-c学习

查看内存变量:

7.2链表1-11节-c学习

2、访问链表代码:

7.2链表1-11节-c学习

读取结果如下图:

7.2链表1-11节-c学习

7.2.8链表删除节点

不同位置的删除:

1、如果删除的是第1个数据结点,即从到,则应使head指针指向E1,同时释放掉Einsert申请的动态内存。

2、如果删除的是中间结点,即从到,则只需让E2->next指向Einsert->next,同时,释放掉Einsert占据的动态内存。

3、如果删除的尾结点,即从到,只需让E1->next为NULL,同时释放掉Einsert占据的动态内存。

7.2链表1-11节-c学习

7.2.7表的插入

顾名思义,插入即是往链表中加入一个新结点,使链表变长。受链表插入位置的影响,将一个元素插入链表有表头,表尾,表中:

7.2链表1-11节-c学习

举例:(需结合本节上面代码部分 )

一、尾部插入代码:

7.2链表1-11节-c学习

修改后的代码结果:

7.2链表1-11节-c学习
  • 中间插入程序
7.2链表1-11节-c学习

总结:

7.2链表1-11节-c学习

语言实现动态链表示例如下

一、动态链表的原理讲解:

7.2链表1-11节-c学习

动态链表:写一函数建立一个有3名学生数据的单向动态链表。

  1. 构建动态链表并读取代码部分。
7.2链表1-11节-c学习
7.2链表1-11节-c学习
7.2链表1-11节-c学习
7.2链表1-11节-c学习

运行结果如下:

7.2链表1-11节-c学习
  • 循环的方式(do-while)实现遍历链表
7.2链表1-11节-c学习

运行结果如下:

7.2链表1-11节-c学习
  • for循环实现对链表的修改
7.2链表1-11节-c学习

运行结果:

7.2链表1-11节-c学习
  • 动态链表的删除
7.2链表1-11节-c学习
  • 动态链表的插入
  • 尾部插入代码
7.2链表1-11节-c学习

结果如下:

7.2链表1-11节-c学习
  • 中间插入
7.2链表1-11节-c学习

结果如下:

7.2链表1-11节-c学习

以上实现了动态链表的创建,以及增删改查。

7.2.11链表与数组的比较

7.2链表1-11节-c学习
7.2链表1-11节-c学习

7.2.11静态和动态数组的优缺点

1、链表和数组的区别:

数组:内存中按照顺序存放;寻址容易;大小固定;删除时需要很多移动;静态数组无法增 加,动态数组需要很多移动。

链表:内存中按照指针链式存放;寻址需要循环;大小可变;查找时需要很多移动;删除, 插入非常便捷

  • 静态和动态数组的优缺点
7.2链表1-11节-c学习
  • 静态数组。

一旦分配内存就固定了长度,不可以再增加了。

外部的内存可以访问,但是外部内存可能被使用,也可能没有被使用。

没有使用的清空下,越界偶尔会成功,还是会被回收利用。

已经使用,越界比如失败

7.2链表1-11节-c学习

4、静态数组的删除:其原理是删除要删除的元素后,其后面的每一个都需要向前移动一个

7.2链表1-11节-c学习
7.2链表1-11节-c学习
  • 静态数组不可以增加
  • 动态数组的优点:可以增加元素
  • 动态数组的创建,其在需要的地方新分配内存。如下
7.2链表1-11节-c学习
  • 动态数组的查询和静态数组相同,比较简单
  • 动态数组的修改:
7.2链表1-11节-c学习
  1. 动态数组的删除,原理跟静态数组相同,不同点是记得要释放内存。
7.2链表1-11节-c学习

11、动态数组的增加,这是与静态数组最大的不同。

  • 插入到尾部
7.2链表1-11节-c学习
  • 插入到中间情况:
7.2链表1-11节-c学习
7.2链表1-11节-c学习
7.2链表1-11节-c学习

总结动态数组的特点:

7.2链表1-11节-c学习
7.2链表1-11节-c学习

以上就实现了动态数组的增删改查

思考:数据库如MySQL是如何被做出来的,查了好多文档都没有讲的很清楚,设计模式是什么呢(其中最重要的就是条件查询和修改了,表之间的关系以及事务处理,事务回滚,表锁等都是后来业务上需求而生成的衍生功能)

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: