队列 栈 链表 基础知识

队列:有两个指针指向的数组,先进先出
栈:有一个指针指向的数组,先进后出

一 队列
1 特殊线性表 ,表 的前端(front)为队头进行删除操作,后端(rear)为队尾进行插入操作。
先进先出FIFO

(1)顺序队列,采用顺序存储,当长度确定时使用。 顺序队列又有两种情况:

①使用数组存储队列的称为静态顺序队列。

②使用动态分配的指针的称为动态顺序队列。☆

(2)链式队列,采用链式存储,长度不确定时使用(由链表实现)。

由于链式队列跟链表差不多,所以在这里只针对循环(环形)队列来说明并实践。
循环队列的两个参数:
  ①front,front指向队列的第一个元素。(fronthead)
  ②rear,rear指向队列的最后一个有效元素的下一元素。(rear
tail)
队列的两个基本操作:出队和入队
在这里插入图片描述
2 队列的操作
入队(尾部入队)
  ①将值存入rear所代表的位置。
  ②rear = (rear+1)%数组的长度。
出队(头部出队)
  front = (front+1)%数组的长度。
队列是否为空
  front和rear的值相等,则该队列就一定为空。
队列是否已满

在循环队列中,“队满”和“队空”的条件有可能是相同的,都是front ==rear,这种情况下,无法区别是“队满”还是“队空”。

针对这个问题,有3种可能的处理方法: 【这里采用了第3种处理方法】

(1)另设一个标志以区别是“队满”还是“队空”。(即入队/出队前检查是否“队满”/“队空”)
(2)设一个计数器,此时甚至还可以省去一个指针。
(3)少用一个元素空间,即约定队头指针在队尾指针的下一位置时就作为“队满”的标志,即“队满”条件为:(pQueue->rear+1)%MAX_SIZE == pQueue->front。
二 栈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值