栈的top指针指向哪里_数据结构与算法(三)——队列与栈

栈(stack)是线性表的一个具体形式,其定义是一个后进先出的线性表,它要求只在表尾进行进行删除和插入操作。

栈的插入操作叫做进栈(push),删除操作叫做出栈(pop)。栈的本质仍是一个线性表,因此栈也分为顺序储存和链式储存两种。

7a17945638715c4c438059db05be4df0.png

存储结构

  • base:指向栈底的指针
  • top:指向栈顶的指针
  • stackSize:当前可使用的最大容量

代码实现

class 

这是网上常见的python中栈的写法,但是我觉得有些取巧,所以换了一个

class 

队列(queue)是只允许在一端进行插入操作,另一端进行删除操作的线性表。与栈相反,队列是先进先出的线性表。

与栈不同,队列通常用链式储存结构,因此需要给出队头和队尾两个指针。

创建一个队列需要完成两个任务:一是创建一个头结点,二是将队列的头指针和尾指针指向这个头结点。

入队流程:

37c18f4e09fb29933c95c67a9fa0ad45.png

出队流程:

f00876ad48640c58544b5fe45c6943cd.png

另一种方式就是使用顺序存储,这种情况下使用数组来表示一个队列,出队和入队就是更改队头和队尾位置的元素。

循环队列:不固定队头位置的顺序队列,不断进行出队和入队操作会造成假溢出(逻辑溢出),为了解决这个问题,采用循环队列,即一个头尾相接的环形对列。 当队头队尾指针的位置超出范围后,需要自动调整到新的位置从头开始,实现这种效果的方式是对数组下标进行取模

代码实现

链式队列

class 

循环队列

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值