数据结构 栈与队列

数据结构 栈与队列

基本概念

p66 概念

栈是仅限制在表尾进行插入和删除操作的特殊线性表,

限制操作的表尾端称为“栈顶”, 另一 端称为“栈底”

特点:

栈是“后进先出”的线性表(LIFO)或 “先进后出”的线性表(FILO)
在这里插入图片描述

栈的抽象数据类型

常见操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

顺序栈

存储结构

与顺序表一样,顺序栈也是使用数组来实现。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本操作

入栈

入栈的基本要求以及步骤

要求:

插入元素x使其成为顺序栈中新的栈顶元素

步骤:
在这里插入图片描述
关键代码
在这里插入图片描述
算法3.1
在这里插入图片描述

出栈

要求

将栈顶元素从栈中移去,并返回被移去的栈顶元素值
在这里插入图片描述
关键代码
在这里插入图片描述
算法
在这里插入图片描述

链栈

存储结构

在这里插入图片描述
重要结论
在这里插入图片描述

求链栈的长度

操作 length ()的实现

计算出链栈中所包含的数据元素的个数并返回其值
在这里插入图片描述
算法
在这里插入图片描述

链栈的入栈操作

push (x )的实现
将数据域值为x的新结点插入到链栈的栈顶,使其成为新的栈顶元素。
步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法实现
在这里插入图片描述

链栈的出栈操作

将首结点(或栈顶结点)从链栈中移去,并返回该结点的数据域的值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法: 出栈操作
在这里插入图片描述

队列

基本概念

队列是只允许在表的一端进行插入,而在表 的另一端进行删除操作的一种特殊线性表。 允许插入的一端称为“队尾”,允许删除的一 端称为“队首”。

栈是“先进先出”的线性表(FIFO)或 “后进后出”的线性表(LILO)
在这里插入图片描述

队列的抽象数据类型

基本操作
在这里插入图片描述
接口
在这里插入图片描述

顺序队列

使用数组表示

队首

队尾
在这里插入图片描述
在这里插入图片描述
重要结论
在这里插入图片描述
在这里插入图片描述

假溢出

问题,及如何解决 p87 含义

解决办法:

最好的办法是把顺序队列所使用的的存储空间看成是一个逻辑上首尾相连的循环队列。

取模操作可以实现: rear = (rear+1)%maxSize

循环顺序队列实现

基本结构

将顺序队列看成是首尾相联的队列。
在这里插入图片描述

无法区分队满和队空

循环顺序队列遇到的问题: 队空和队满无法区分

队空与队满的条件相同,无法判断,怎么办?

解决办法:

  • 设一个标志变量flag
  • 设置一个计数变量num
  • 少用一个元素空间
    方法1:设一个标志变量flag并置初值为0, 每当入队操作成功后就置flag=1;每当出队操作成功后就置flag=0 。
    在这里插入图片描述
    方法2:设置一个计数变量num并置初值为0,每当入队操作成功后num加1;每当出队操作成功后num减1。
    在这里插入图片描述
    方法3: 少用一个元素空间
    在这里插入图片描述
    在这里插入图片描述
    代码实现
    循环队列实现, 使用的是 少一个元素空间的办法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    入队
    将新元素x插入到一个循环队列的队尾。

步骤
在这里插入图片描述
关键代码
在这里插入图片描述
完整算法:
在这里插入图片描述
出队
将队首元素删除,并返回其值

步骤:
在这里插入图片描述
在这里插入图片描述
完整算法:
在这里插入图片描述

链队列及其基本操作的实现

存储结构

队列的链式存储结构称为链队列,其链式存储结构在此用不带头结点的单链表来实现.
在这里插入图片描述
重要结论
在这里插入图片描述
代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

入队

插入新元素x使其成为新的队尾元素。
步骤:
在这里插入图片描述
代码
在这里插入图片描述
完整算法
在这里插入图片描述

出队

移去队首元素并返回其值
在这里插入图片描述
步骤:
在这里插入图片描述
在这里插入图片描述
完整算法
在这里插入图片描述

优先队列

基本概念

优先级队列是一种带有优先级的队列,并且按优先级从大到小有序排列。
也有顺序和链式两种存储结构。
优先队列链式存储的结点结构
在这里插入图片描述
在这里插入图片描述

类的描述

数据结点类

elem表示数据值

priority 表示优先级

在这里插入图片描述

入队

入队操作

核心思路:

如果队列是空的 直接添加到队尾,否则 根据要插入结点的优先级,在队列内找到合适的位置进行添加
代码细节:
在这里插入图片描述
在这里插入图片描述

栈与队列的比较


相同点

1.都是线性结构,即数据元素之间具有“一对一”的逻辑关系。
2.插入操作都是限制在表尾进行。
3.都可在顺序存储结构和链式存储结 构上实现。
4.在时间代价上,插入与删除操作都 需常数时间;在空间代价上,情况也相同。
5.多链栈和多链队列的管理模式可以相同。

不同点

  1. 删除数据元素操作的位置不同 。
  2. 两者的应用场合不相同 。
  3. 顺序栈可实现多栈空间共享,而顺序 队列则不同 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值