day04 1.操作受限的线性表2.栈3.队列

一、操作受限的线性表

1> 在之前的内容,无论是顺序表还是链表,都是详细处理的线性表,既可以在端点处进行操作,也可以在中间位置操作

2> 现实生活中,有很多并不需要在中间进行操作的序列,只在端点处进行操作,这样的线性表,我们称为操作受限的线性表

3> 根据不同的受限情况,线性表分为:栈、队列

4> 栈:插入和删除操作都只允许在同一端进行。

队列:插入和删除操作都只允许在异端进行。

二、栈

2.1 栈的相关概念

1> 栈:操作受限的线性表,插入和删除只能在同一端进行,不能在中间进行相关操作

2> 允许操作的一端,称为栈顶,不允许操作的一端称为栈底

3> 特点:先进后出(后进先出)

例如:水杯容器、枪的弹夹

4> 栈的分类:根据存储方式的不同,分为顺序栈和链式栈

顺序栈:顺序存储的栈称为顺序栈

链式栈:链式存储的栈称为链式栈

  • 2.2 顺序栈

    • 1>原理图

    • 2> 结构体类型

    • 3> 创建栈 创建栈空间后,还需要为栈申请存储空间

    • 4> 判空、判满

    • 5> 入栈 先加后压

    • 6> 出栈 先弹后减

    • 7> 遍历栈 本质上是数组的遍历

    • 8> 获取栈顶元素的地址

    • 9> 求栈的大小 本质上就跟top有关

    • 10> 销毁栈 先销毁容器,再销毁栈

  • 2.3 链式栈

    • 1> 链式存储的栈,称为链式栈

    • 2> 对于单链表而言,我们可以使用,使用头插头删完成一个栈,或者尾插尾删完成链式栈

    • 3> 头插头删:链表的头部就是栈顶,链表的尾部就是栈底(常用)

    • 4> 尾插尾删:链表的尾部就是栈顶,链表的头部就是栈底

三、队列

  • 3.1 队列介绍

    • 1> 队列也是操作受限的线性表:所有操作只能在端点处进行,其删除和插入必须在不同端进行

    • 2> 允许插入操作的一端称为队尾,允许删除操作的一端称为队头

    • 3> 特点:先进先出(FIFO)

    • 4> 分类: 顺序存储的队列称为顺序队列 链式存储的队列,称为链式队列

  • 3.2 顺序队列

    • 1> 使用一片连续存储的空间存储队列,并且给定两个变量,分别记录队头和队尾下标

    • 2> 普通顺序队列使用中,存在“假溢满”现象 假溢满:队列中明明还有存储空间,但是由于队尾已经达到了数组的最大下标,不能在继续入队元素了

    • 3> 为了解决“假溢满”现象,我们引入了循环顺序队

  • 3.3 循环顺序队列

    • 1> 循环顺序队列:通过相关操作,当对头或队尾达到数组最大下标时,可以返回到下标为0的位置

    • 2> 结构体类型:一个数组存储队列,两个变量分别存储队头和队尾的下标 注意:需要人为浪费一个存储空间,用于判满

    • 3> 创建队列

    • 4> 判空判满

    • 5> 入队:将数据放入队尾所在位置

    • 6> 遍历队

    • 7> 出队

    • 8> 求队列的大小:只用队头和队尾完成

    • 9> 销毁队列

  • 3.4 链式队列

    • 1> 链式存储的队列称为链式队列

    • 2> 实现原理: 单向链表头插尾删实现:链表的头部就是队尾,链表的尾部就是队头 单向链表头删尾插实现:链表的头部就是队头,链表的尾部就是队尾 但是:上述操作中,都要用到链表尾部节点,都需要遍历整个链表完成,效率较低 此时,我们可以引入尾指针的概念,专门指向最后一个节点的指针。

    • 3> 将一个头指针和一个尾指针封装成一个队列

    • 4> 队列类型

    • 5> 创建队列 注意:先创建出队列、然后创建链表、将队列的两个指针指向链表

    • 6> 队列判空 只需要队头和队尾都指向头结点即可

    • 7> 入队

    • 8> 遍历队

    • 9> 出队 出队时,需要注意,如果所有节点全部出队,则需要将尾指针重新指向头结点 10> 销毁队伍

    • 11> 求队列长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值