本篇文章作于某个凌晨,由于我一学期没学自己的专业课,快考试了临时抱佛脚,在考试中这块内容涉及不多,于是打算简单回顾一下自己所学的知识点,再去针对性学一下想不起来的点。我看的是b站青岛大学王卓老师的数据结构讲解视频,很详细适合我这种小白快速了解整体思想,先草草完成这章的知识点大纲,后面再补充
一、栈相关知识点
1、栈的定义
栈:仅在表尾进行插入和删除操作的线性表
栈和队列都是一种特殊的线性表,在线性表中我们学了顺序表和链表,因此栈也有顺序栈和链栈,我感觉链栈不是很重要,着重看了顺序栈。栈特殊在哪里?你就可以想象给手电筒换电池,最后一节电池会最先拿出来,所以记住栈的特征”后进先出”(LIFO:Last In First Out)
2、栈的表示
栈(stack):我们把允许插入和删除的一端叫栈顶(top),另一端叫栈底(Bottom)
3、栈的抽象数据类型表示ADT
(1)初始化InitStack(&S)
操作结果:构造一个空栈S
(2)入栈push(&S,e)
初始条件:栈S存在;
操作结果:插入元素e作为新栈顶元素;
(3)出栈pop(&S,&e)
初始条件:栈S已存在且非空;
操作结果:删除栈顶元素an,并用e返回其值;
(4)销毁DestoryStack(&S)
初始条件:栈S已存在
操作结果:栈S被销毁
(5)判定栈S是否为空栈StackEmpty(&S)
初始条件:栈S已存在
操作结果:若为空,返回TRUE;不为空,返回FALSE;
(6)返回栈的长度StackLength(S)
初始条件:栈S已存在
操作结果:返回S的元素个数,即栈的长度;
4、一些标志
栈空标志:base(栈底指针)==top(栈顶指针)
栈满标志:top-base==stacksize
上溢overflow:栈已经满了,又要压入元素(错误,无法进行)
下溢underflow:栈已经空,还要弹出元素(结束条件)
5、栈的应用
(1)进制转换,十进制转换为八进制等;
(2)递归,斐波那契数列,大话数据结构P88
二、队列相关知识点
1、队列的定义
队列:只允许在一端进行插入操作、而在另一端进行删除操作的线性表,Queue
2、队列的表示
在队列中,会有真溢出和假溢出;
真溢出:
假溢出:
看是否为真溢出,就看头指针front是不是0
为避免出现类似问题,我们想出了循环队列的方法,将rear+1到0的位置
可这样又出现了一个问题,就是队空和队满时都为front==rear,解决方法为少用一个元素空间
3、队列的抽象数据类型表示
InitQueue(&Q):建立一个空队列Q
DestroyQueue(&Q):若Q存在,就销毁它
ClearQueue(&Q):将队列Q清空
QueueEmpty(Q):若队列为空,返回true,否则返回false
GetHead(Q,&e):若Q存在且非空,用e返回队列的队头元素
EnQueue(&Q,e):队列Q存在,插入新元素e到队列Q中并成为队尾元素
DeQueue(&Q,&e):删除队列Q的队头元素,并用e返回其值
QueueLength(Q):返回Q的元素个数