数据结构-线性表

2、线性表

2.1线性表的定义和基本操作

image-20201204091514424

image-20201204092022739

image-20201204092005160

image-20201204093315684

image-20201204093648689

image-20201204093815493

image-20201204093840759

2.2 顺序表的定义

image-20201204094028540

image-20201204094321870

顺序表的实现——静态分配

静态实现,定义固定大小的数组

image-20201204094556620

初始化时如果没有进行赋值,可能会读取到内存中遗留下来的”脏数据“

声明一个类型,默认对其进行赋值初始化是编译器,如果更换编译器,结果不一

image-20201204095109310

思考:如果“数组”内存满了怎么办?

提前定义大容量内存,势必造成资源的浪费

malloc()返回整块内存地址空间的起始地址

image-20201204100339061

image-20201204101121851

image-20201204101336606

小结

image-20201204101252558

2.3 顺序表的相关操作

顺序表的插入

image-20201204101620143

image-20201204102220567

代码优化

  • 传入参数是否合法
  • 数组本身是否满额,无法插入

image-20201204102654195

插入操作的时间复杂度

image-20201204103009219

顺序表的删除

image-20201204103509432

删除操作复杂度

image-20201204103722356

小结-1

image-20201204103908270

顺序表的查找

image-20201204104053210

image-20201204104309392

image-20201204104415922

image-20201204104442450

image-20201204111229340

image-20201204111333486

2.3 单链表的定义

image-20201204111442886

什么是单链表

image-20201204111624350

image-20201204111853114

image-20201204112125757

不带头结点的单链表

image-20201204112444643

带头结点的单链表

image-20201204112634352

image-20201204112727727

小结-1

image-20201204112815228

单链表的插入

image-20201204113013503

按位序插入 i=1,3,6

image-20201204114044543

image-20201204115355763

image-20201204115439455

指定节点的后插操作

image-20201204115801639

image-20201204120007890

image-20201204120140666

image-20201204120332767

image-20201204120850178

image-20201204121017452

单链表的查找

带头结点的单链表的查找,按位查找,按值查找

image-20201204121512438

image-20201204122203668

小结-2

image-20201204122619098

单链表的建立

尾插法

方法1:(不推荐)

image-20201210082523303

image-20201210083150146

头插法

image-20201210083723953

总结:

头插法、尾插法核心是初始化操作、指定结点的后插操作。头插法可用于链表的逆置。

2.4 双链表

由于单链表不利于查找前驱结点,进行删除。提出了在每个结点中增设前驱指针的双链表

初始化

image-20201210084514168

插入

image-20201210085019368

删除

image-20201210091809137

遍历

image-20201210092136676

总结

image-20201210092241042

2.5 循环链表

image-20201210092618553

image-20201210094548572

image-20201210094644959

image-20201210094728208

双链表的插入???

image-20201210095143447

删除

image-20201210095417574

image-20201210095721799

2.6 静态链表

image-20201210100143023

定义:

image-20201210100850294

初始化:

image-20201210101441983

查找/删除:

image-20201210101529422

总结:

静态链表:用数组的方式实现的链表

优点:增、删操作不需要大量移动元素

缺点:不能随机存取,只能从头结点开始依次往后查找:容量固定不可变

适用场景:

  • 不支持指针的低级语言
  • 数据元素数量固定不变的场景(操作系统的文件分配表FAT)

2.7 顺序表VS链表

逻辑结构:

线性结构,线性表

存储结构:

  • 顺序表(顺序存储)
    • 优点:支持随机存取,存储密度高
    • 缺点:大片连续空间分配不方便,改变容量不容易
  • 链表(链式存储)
    • 优点:离散小空间分配方便,改变容量方便
    • 缺点:不可以随机存取,存储密度低

基本操作:

创销

image-20201210104330328

image-20201210104723964

增删盖查

image-20201210105109901

image-20201210105349759

应用场景:

如果是存储数据长度固定,查询操作为高频操作,可以考虑使用顺序表

如果数据长度未知,增删操作频繁,优先推荐链表

posted @ 2021-10-18 22:45  三两研几  阅读(21)  评论(0)    收藏  举报