数据结构栈和队列总结

本篇文章作于某个凌晨,由于我一学期没学自己的专业课,快考试了临时抱佛脚,在考试中这块内容涉及不多,于是打算简单回顾一下自己所学的知识点,再去针对性学一下想不起来的点。我看的是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的元素个数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值