数据结构学习20250612
栈、队列和链表
栈
- 栈的定义:只允许在一端进行插入和删除的线性表
- 栈顶:线性表允许插入和删除的一端
- 栈底:线性表不允许插入和删除的另一端
- 空栈:不含任何元素的空表
- 特点:后进先出(LIFO)
栈操作
- initstack(&S):初始化一个空栈
- stackempty(S):判断栈是否为空
- push(&S, x):进栈
- pop(&S, &x):出栈
- gettop(S, &x):读栈顶元素
- destroystack(&S):栈销毁,并释放S占用的存储空间
栈的顺序存储
顺序栈,利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时预设一个指针top指示当前栈顶元素的位置
共享栈(两栈共享空间),利用栈底位置相对不变的特征,可以让两个顺序栈共享一个一维数组空间,将两栈的栈底设置在共享空间的两端,两个栈顶向共享空间中间延伸
栈的链式存储
链栈,便于多个栈共享存储空间,采用单链表实现,规定所有的操作在单链表的表头进行,链表没有头节点,lhead指向栈顶元素
队列
- 对列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
- 特点:先进先出(FIFO)
- 队头:允许删除的一端
- 队尾:允许插入的一端
- 空队列:不包含任何元素的空表
队列操作
- 初始化队列
- 判断队列是否为空
- 入队
- 出队
- 读队头元素
队列的顺序存储
顺序队列是分配一块连续的存储单元存放队列中的元素,并设两个指针,队头指针和队尾指针
循环队列是当队尾元素溢出时,从头开始存储,形成一种头尾衔接的顺序存储结构
队列的链式存储
链队列是一个同时带有队头指针和队尾指针的单链表,规则是尾进头出
双端队列
双端队列是两端都可以进行出队和入队操作的队列
链表
- 定义:链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种先行存储结构
- 特点:链表由一系列节点组成,节点在运行时动态生成,每个节点包含存储数据元素的数据域和存储下一个节点地址的指针域
- 双向链表:与单向链表的区别是节点中有两个节点指针,分别指向前后两个节点。
- 链表和数组的对比:
链表是通过节点把离散的数据链接成一个表,通过对节点的插入和删除操作实现对数据的存取。
数组是通过开辟一段连续的内存来存储数据,这是两者最大的区别。
数组有起始地址和结束地址,链表是一个圈,没有头尾之分,但是为了方便节点的插入和删除操作会人为规定一个根节点