【数据结构(11)】3.1 栈和队列的定义和特点

前言

  • 栈和队列是两种常用的、重要的数据结构。
  • 栈和队列是限定插入和删除只能在表的“端点”进行的线性表

普通线性表的插入和删除

在这里插入图片描述

一、栈的定义和特点

1. 栈的特点

  • 是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。
  • 又称为后进先出(Last In First Out)的线性表,简称 LIFO 结构。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 添加元素是从栈顶一个一个像码垛一样天加上去的,称为压栈操作。
  • 想要出栈把1挪出去,只能从栈顶开始,一个一个的挪出去,直到把1挪走。
  • 栈特点:先进后出,后进先出

2. 栈的相关概念

  • 是仅在表尾进行插入、删除操作的线性表。
    • 表尾(即an端)称为栈顶 Top;表头(即a1端)称为栈底 Base。

在这里插入图片描述

  • 插入元素到栈顶(即表尾)的操作,称为入栈
  • 栈顶(即表尾)删除最后一个元素的操作,称为出栈

在这里插入图片描述

栈的示意图

在这里插入图片描述

入栈的操作示图

在这里插入图片描述

出栈的操作示图

在这里插入图片描述

举个例子

  • 假设有3个元素 a,b,c,入栈顺序是a,b,c,则他们的出栈顺序有几种可能?
    1. a,b,c,依次先全部入栈,那么出栈顺序自然就是c,b,a。
    2. a 入栈然后 a 出栈,b 入栈然后 b 出栈,c 入栈然后 c 出栈,出栈顺序就是 a,b,c 了。
    3. a 入栈然后 a 出栈,b、c依次入栈然后 c、b 依次出栈,出栈顺序就是 a,c,b 了。
    4. a、b依次入栈然后 b、a 依次出栈,最后c入栈出栈,出栈顺序为 b,a,c。
    5. a、b依次入栈,然后 b 出栈,c 入栈,然后 c、a 依次出栈,出栈顺序为 b,c,a。

在这里插入图片描述

思考:出栈顺序有可能出现cab的情况吗?

  • 如果想让c先出栈,又要按照abc的入栈顺序。
  • 也就是说,如果c已经入栈的话,那么ab肯定也入栈了,想得到a的话必须先让b出栈,那么cab的出栈顺序就是不能能的。

栈的相关概念

  1. 定义:限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)。
  2. 逻辑结构:同线性表相同,仍为一对一的关系。
  3. 存储结构:用顺序栈链栈存储均可,但以顺序栈存储更常见。
  4. 运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)的原则。
  5. 实现方式:关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同。

栈与一般线性表的区别仅在于运算规则的不同

在这里插入图片描述

3. 栈的应用

  • 由于栈的操作具有后进先出的固有特性,使得栈成为程序设计中的有用工具。
  • 另外,如果问题求解的过程具有后进先出的天然特性的话,则求解的算法中也必然会利用到
    • 比如:

在这里插入图片描述

二、队列的定义和特点

在这里插入图片描述
在这里插入图片描述

  • 队列是一种先进先出(First In Frist Out——FIFO)的线性表.
  • 它只允许在表的一端(表尾)插入元素,而在另一端(表头)删除元素。

1. 队列的插入和删除

  • 队列在插入元素的时候也只能从表尾插入,删除的时候却只能删除第一个元素。

在这里插入图片描述

  • 想删除 3,就只能从 0 开始一直删除到 3 为止。

  • 队列一般用Q来表示,将a1到an依次存入到数组当中,加入一个元素只能从队尾加入。

在这里插入图片描述

2. 队列的相关概念

  1. 定义:只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表(头删尾差
  2. 逻辑结构:同线性表相同,仍为一对一的关系。
  3. 存储结构顺序队链队,以循环顺序队列更常见。
  4. 运算规则:只能在队首和队尾运算,且访问节点依照先进先出 FIFO的原则。
  5. 实现方式:关键是掌握入队出队操作,具体实现依顺序队或链队的不同而不同

3. 队列的应用

  • 由于队列的操作具有先进先出的特性,使得队列称为程序设计中解决类似排队问题的有用工具。
    • 脱机打印输出:按申请的先后顺序依次输出。
    • 多用户系统中,多个用户排成队,分时地循环使用CPU和主存。
    • 按用户的优先级排成多个队,每个优先级一个队列。
    • 实施控制系统中,信号按接收的先后顺序依次处理。
    • 网络电文传输,按到达的时间先后顺序依次进行。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值