数据结构第二章:线性表

本文详细介绍了数据结构中的顺序表和链表,包括静态分配、动态分配、插入、删除和查找操作。对于顺序表,探讨了静态分配的局限性和动态分配的灵活性。在链表部分,讲解了单链表和双链表的定义、插入、删除、查找及创建方法,并提到了循环链表和静态链表的概念。内容涵盖了数据结构的基础知识,适合复习和学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义、基本操作


在这里插入图片描述

什么时候要传入参数的引用“&” —— 对参数的修改结果需要“带回来”
在这里插入图片描述

顺序表

在这里插入图片描述

1.静态分配

在这里插入图片描述
用数组来存,开辟一片连续的存储空间
在这里插入图片描述
将所有数据元素设为默认值,防止之前那个地方有脏数据

如果数组存满了只有等死了,因为静态分配的表长是没法更改的

2.动态分配

在这里插入图片描述
在这里插入图片描述
拓展容量不方便,要全部移动
在这里插入图片描述

3.顺序表的插入

在这里插入图片描述
注意第9个是data[8]
第i位之后的元素全部往后移
在这里插入图片描述
加两个判断条件

在这里插入图片描述

4.顺序表的删除

在这里插入图片描述

在这里插入图片描述
从后面直接往前覆盖

在这里插入图片描述
在这里插入图片描述

5.查找
1.按位查找

在这里插入图片描述

时间复杂度:O(1) ,顺序表可以立马找到

2.按值查找

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单链表

1.定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不带头结点,写代码更麻烦。对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑;对空表和非空表的处理需要用不同的代码逻辑

在这里插入图片描述

2.单链表的插入
①带头结点

在这里插入图片描述
在这里插入图片描述
如果p=NULL说明i输入的有问题(太大了)

②不带头结点

在这里插入图片描述
体现了头结点的好处,不需要额外写代码
在这里插入图片描述

③后插

在这里插入图片描述
找到位置,直接后插就行(内存有可能分配失败)
时间复杂度 O(1)

④前插

在这里插入图片描述
给了p的指针,由于单链表的指针都是指向后面的,不能往前面查,所以只有从头结点开始找p的前驱q(用一个指针q,q→next=p,循环找),找到q后插

在这里插入图片描述
p后面插个新结点,把p里的复制进去,再用e去覆盖掉p里的内容(等同于前插)
时间复杂度O(1)

3.单链表的删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
偷天换日,让q指着p后面的,然后把q里的数据弄到p里去,改变一下指针,最后删掉q(否则得找到p的前驱去修改指针)

如果P是最后一个结点,就只有从头找到P的前驱

单链表的局限性:无法逆向检索,有时候不太方便

在这里插入图片描述
这些代码有可能考的,选择题出选项什么的

4.查找
①按位查找

在这里插入图片描述

②按值查找

在这里插入图片描述

③求表的长度

在这里插入图片描述

在这里插入图片描述

5.创建单链表
①尾插法

在这里插入图片描述
在这里插入图片描述

②头插法

在这里插入图片描述
在这里插入图片描述

双链表

在这里插入图片描述

1.初始化

在这里插入图片描述

2.插入

在这里插入图片描述

3.删除

在这里插入图片描述

4.遍历

在这里插入图片描述
在这里插入图片描述

循环链表

1.循环单链表

在这里插入图片描述
在这里插入图片描述
L指向尾部比较好(因为尾部一下就到头部,头部找过来要很久)

2.循环双链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

静态链表

开辟一个连续的空间,但是里面的内容又是随便放的(有种折中的感觉)
在这里插入图片描述

1.定义

在这里插入图片描述

2.各个基本操作

初始化静态链表:
把 a[0] 的 next 设为 -1
把其他结点的 next 设为一个特殊值用来表示结点空闲,如 -2

查找:
从头结点出发挨个往后遍历结点

插入位序为 i 的结点:
①找到一个空的结点(next是-2),存入数据元素
②从头结点出发找到位序为 i-1 的结点(-1)
③修改新结点的 next(-1,表示最后一个)
④修改 i-1 号结点的 next(新结点的位置)

删除某个结点:
①从头结点出发找到前驱结点
②修改前驱结点的游标
③被删除结点 next 设为 -2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据结构里的三件套:逻辑结构,存储结构,基本操作,都是从这三方面展开研究的,所以开放式问题围绕这三个回答即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值