2023考研第二章

2023数据结构第二章

线性表

线性表的定义

除去第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,
每个元素有且仅有一个后继元素

特点

元素的个数有限
逻辑上有顺序性
元素都是数据元素
元素类型大小相同
具有抽象性

顺序表

线性表的的顺序存储又称为顺序表,他是由一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。
特点是表中的元素的逻辑书序与物理顺序相同。
线性表中任何一数据元素都可以随机存取。所以线性表是一种随机存取的存储结构。常用高级程序设计语言中的数组来描述线性表中的顺序存储节后。

静态分配和动态分配

静态分配时,由于数组的大小和空间已经固定,一旦空间占满,再加入新的数据就会产生溢出,进而导致程序崩溃
动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间占满,就要开辟更大的存储空间用来替换原来的存储空间,从而达到扩充存储空间的目的,而不用为线性表一次性的划分所有空间。(动态分配不是链式存储,他同样属于顺序存储结构,物理结构没有变化)

特点

顺序表最主要的特点是随机访问,能够在O(1)的时间内找到指定的元素
存储密度高,每个节点只存储数据元素。
顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除操作需要移动大量的元素。

链式表示

线性表的链式存储又称为单链表,他是通过一组任意的存储单元来存储线性表中的数据元素。为了建立数据元素之间的线性关系。
单链表是非随机存取的存储方式。要找到某个元素需要从表头开始遍历
通常用头指针来标识一个单链表,如单链表L,头指针为NULL时表示一个空表。此外为了操作上的方便,在单链表的第一个节点之前附加一个结点,称为头结点,头结点的数据域不设任何信息,也可以记录表长等信息
头结点的指针域指向线性表的第一个元素节点。
头结点和头指针的区别:不管带不带头节点,头指针都指向链表中的第一个结点
头结点的优点:
链表在第一个位置上的操作和在表的其他位置上的操作一致,无需其他特殊处理
头指针总是指向头结点的非空指针,空表和非空表得到了同一

双链表

单链表从头到后遍历、
双链表结点有两个指针prior和next,分别指向前面结点和后一个结点。
typedef struct DNode{ //定义双链表结点类型
ElemType data; //数据域
struct DNode *prior, *next; //前驱和后继指针
}DNode, *DLinklist;

循环单链表

表中的最后一个结点指针不是NULL,而是改为指向头结点,从而整个链表是一个环。
由于表尾结点的指针指向的是头结点,所以判空条件变成头结点的指针是否指向自己。
循环单链表不设头指针而设尾指针r,r->next为头结点。对表头和表尾操作都只需要O(1)的时间复杂度。

循环双链表

在循环双链表中,头结点的prior指针指向表尾结点

静态链表

就是数组,不过指针变成了数组中的a[i]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值