数据结构之栈,队列

定义: 一种限定性线性表,将线性表的插入和删除运算限制为仅在表的一端进行
表中允许进行插入、删除操作的一端称谓栈顶(Top),
表的另一端被称为栈底(Bottom)
栈中没有元素时为空栈
栈的插入操作为进栈入栈
栈的删除操作为出栈退栈
特点: 后进先出(LIFO)
在这里插入图片描述

栈的存储结构

链栈: 利用一组不连续的存储单元存放栈内的元素(类似于数组)
顺序栈: 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素(类似于数组)
顺序栈的出栈进栈示例
在这里插入图片描述

栈的基本操作

基本操作:(1)InitStack(S)初始化:S->Top=-1
(2)Empty(S)栈的非空判断:S->Top==-1
(3)IsFull(S)判栈满:S->Top==Stack_Size-1
(4)Push(S,x)入栈:需要先判栈满
(5)Pop(S)出栈(破坏性行为):需要先判栈空
(6)GetTop(S)取栈顶元素(非破坏性行为):先判栈空,只需要读出栈顶元素,不需要将栈顶指针-1;
(7)SetEmpty(S)置栈空

队列

队列:操作受限的线性表,所有的表的插入在一端进行,而删除操作在表的另一端进行的线性表。
允许进行插入操作的一端称为队尾(rear)
允许进行删除操作的一端称为队头(front)
特点: 先进先出(FIFO)
队列的基本操作:
1、队列初始化: InitQueue(q)初始化一个空队;
2、入队操作: InQueue(q,x)
对已存在的队列q,插入一个元素 到队尾。
操作成功,返回值为TRUE,否则返回值为FALSE;
3、出队操作: OutQueue(q,x)删除队首元素,并返回其值。操作成功,返回值为TRUE。
4、读队头元素: FrontQueue(q,x)读队头元素,并返回其值,队不变。
操作成功,返回值为TRUE,否则返回值为FALSE。
5、判队空操作: EmptyQueue(q)若q为空队则返回为1,否则返回为0。

队列的存储方式

顺序结构

顺序结构实际就是使用一维数组来实现
队头指针指示队列中队头元素的前面一个位
队尾指针指示队列中队尾元素位置

在这里插入图片描述

队空和队满

队空条件:rear=front
假队满:rear==maxsize,rear-front<maxsize
在这里插入图片描述
队满:rear-front=maxsize

循环队列

在这里插入图片描述
队空:rear= =front
队满:rear+1= =front
边界问题:(类似于钟表)
每次头指针和尾指针执行+1操作后对maxsize进行取模操作
基本操作
①初始化:q->front=q->rear=maxsize-1;
②入队:(q->rear+1)%maxsize= =q->front//判队满
q->rear=(q->rear+1)%maxsize;
q->element[q->rear]=x;//添值
③出队:q->front= =q->rear
q->front=(q->front+1)%maxsize
*x=q->element[q->front]
如何判断循环队列的队空和队满?
①少用一个存储单元
队空条件:rear=front
队满条件:(rear+1)%maxsize=front
②设置一个标志
队空条件:rear=front&&tag=0
队满条件:rear=front&&tag=1
③设置一个计数器
队空条件:count=0;
队满条件:count=maxsize

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值