文档讲解:代码随想录
课本:数据结构(C语言版 第2版)双色版
难度:一般嗷~~
线性表
线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。
当n=0时,线性表是一个空表。
特点
- 线性表可以表示为L=(a1, a2, …, an),其中a1是唯一的第一个数据元素,
- an是唯一的最后一个数据元素。
- 除了第一个元素之外,结构中每个元素都只有一个前驱;
- 除了最后一个元素之外,结构中每个元素都只有一个后继。
线性表的逻辑特性
线性表的逻辑特性包括:
- 元素关系:线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
- 元素顺序:线性表中的数据元素按照一定的顺序排列,可以是有序的也可以是无序的。
- 空表:当线性表的长度为0时,称为空表。
线性表的存储结构
线性表的存储结构主要有两种:
- 顺序存储结构:使用一组地址连续的存储单元依次存储线性表的数据元素,以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
- 链式存储结构:通过指针将数据元素连接起来,形成链表。链表包括单链表、双链表等。
线性表的类型定义
以下为伪代码
ADT list{
数据对象:D={a1|a2属于ElemSet,i=1,2,...,n,n>=0}
数据关系:R={<ai-1,ai>|ai-1,ai属于D,i=1,2,...,n}
基本操作:
InitList(&L):初始化表.构造一个空的线性表L,分配内存空间。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占有的内存空间。
ListInsert(&L,i,e):插入操作。在表L中的第i个位序(位置)上插入制定元素e。
ListDelete(&L,i,&e):删除操作。删除表L中第i个位序(位置)的元素,并用e返回删除元素的值。
LocateElem(L,e):按值查找操作。在表L中查找具体给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
}
InitList(&L):初始化表。构造一个空的线性表L,分配内存空间。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占有的内存空间。
ListInsert(&L,i,e):插入操作。在表L中的第i个位序(位置)上插入制定元素e。
ListDelete(&L,i,&e):删除操作。删除表L中第i个位序(位置)的元素,并用e返回删除元素的值。
LocateElem(L,e):按值查找操作。在表L中查找具体给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
其他常用操作:
Length(L):求表长操作。返回线性表L的长度,即L中数据元素的个数。
PrinList(L):输出操作。按前后顺序输出线性表L的所有元素值。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。
Tips:
①对数据的操作(记忆思路)——创(Init)销(Destroy)、增(Insert)删(Delete)改(Alter)查(Query)
②C语言函数的定义
③实际开发中,可根据实际需求定义其他的基本操作
④函数名和参数的形式、命令都可改变
⑤什么时候需要传入“&”——对参数的修改结果需要“带回来”
引用作者:Fresh_anyu
原文链接:线性表的定义和基本操作
顺序存储结构
随机存取
初始化,取值,查找,插入,删除
链表基础
顺序存取
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链表的类型
单链表
单链表中的指针域只能指向节点的下一个节点。
双链表
每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。
双链表 既可以向前查询也可以向后查询。
循环链表
最后一个节点指向第一个节点。
链表的存储方式
数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。
链表是通过指针域的指针链接在内存中各个节点。
所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。
剩下的晚上出
欢迎各位大佬纠正。
如果有问题可以在评论区讨论。
引用:
- 代码随想录
- 数据结构(C语言版 第2版)双色版 严蔚敏,李冬梅,吴伟民 著
- Fresh_anyu