王道考研-数据结构(二)

线性表

定义

具有相同数据类型的n个数据元素的有限序列 linear list 特点:有序、每个元素所占空间一样大

位序(也就是a1、ai的1、i)是从1开始 数组下标从0开始

顺序表

用顺序存储的方式实现线性表顺序存储--逻辑上相邻的元素物理位置上相邻

静态分配(存放到栈区,自动释放) 类似于int temp[10]这样的方式,不可原地扩容,只能动态拷贝复制

动态分配(存放到堆区,手动释放) c使用malloc realloc等函数进行分配和扩容--其实也是拷贝 c++使用new delete函数分配空间

特点 随机访问:查找时间为常数级 存储密度高:相对于链表不需要存放指针 拓展容量不方便:只能动态分配,O(n)的时间复杂度 插入、删除也不方便

插入

先检查是否溢出和插入位置的合法性;将插入位置以后的原本位于i的元素移到i+1处(注意边界和从大到小)

删除

注意删除位置的合法性;i的元素移到i-1处(从小到大);注意引用&

查找

按位/按值:注意说的是位序(1..n)还是数组下标(0..n-1)

链表

单链表

带头结点和不带头节点,注意判断为空条件 ​ 不要求大片连续空间,改变容量方便;存取麻烦,要耗费一定空间存放指针

头指针L指向单链表第一个结点

`typedef struct Node{`
    ...
`}Node,*LNode`

Node 强调结点,LNode强调这是一个单链表(的开头)

插入

注意不带头节点时插入到第一个的情况

前插、后插、尾插、头插

按位序/指定位置的删除

查找

注意封装,比如将指定位置插入转化为插入+查找

健壮性:比如为NULL的情况

建立

struct->初始化头节点->插入(可以放一个表尾指针降低查找消耗)

双链表

相比于链表加一个前驱指针,注意删除-增加的时候有无后继节点即可

循环链表

建立时候注意head -> next = head,其他操作都差不多

方便了判断是否为空,以及存储表尾指针时候可以很快插入

此外还有循环双链表

静态链表

有点特殊的写法(?)

容量不变,所以主要注意增加:如何找到一个为空的结点——设置next为-2

支持不需要指针的低级语言;和数据元素量基本不变的场景(操作系统)

最后注意一下顺序表和链表的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值