数据结构--------(堆栈 和 队列)
Posted 笑傲江湖未平生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--------(堆栈 和 队列)相关的知识,希望对你有一定的参考价值。
1、栈
1、定义:只允许从一端插入或删除的线性表。逻辑结构:元素相邻;物理存储结构:顺序栈 和 链式栈;运算:只能从一端操作,受限的线性表
2、栈的基本操作: InintStack、StackEmpty、pop 、push 、peek(GetTop)、ClearStack(6个)
3、顺序栈:利用一组连续地址存储单元存储自栈底到栈顶的元素,同时附有一个指针指向当前栈顶的位置
3.1 顺序栈操作: 初始时 S.top = -1;栈顶元素值:S.data[S.top]
进栈操作:首先判断是否栈满,不满进栈,栈顶元素加一(S.data[++S.top] = data)
出栈操作:判断是否栈空,不空,出栈,栈顶元素减一 data = S.data[S.top--]
栈空条件: S.top = -1;
栈满条件:S.top = MaxSize - 1 (从0是第一个)
3.2 共享找 : 让两个顺序栈共享一个一维数组,两个栈的栈底分别为数组两端,判满:S1.top - S0.top = 1;
4、链式栈: 不存在栈满的情况
2、队列:
1、 队列也是受限的线性表,只允许从一端插入,另一端进行删除,Front队头允许删除的一端,Rear队尾
插入的一端
2、顺序存储的队列:初始 Q.rear == Q.front ==0;
入队: 不满,入队,rear + 1;
出队:不空,出队,front - 1;
3、循环队列:当队首指针达到MaxSize - 1时 可以继续添加 到首端0
初始: Q.rear === Q.front==0;
入队:如果不满,Q.rear = (Q.rear +1)%MaxSize
出队:如果不空,Q.front = (Q.front - 1)%MaxSize
队列长度:(Q..rear - Q.front + MaxSize) % MaxSize
判空方法: a,牺牲一个单位元素来区分队空: 判满 (Q.rear + 1)%MaxSize==Q.front
判空 Q.rear == Q.front
元素个数:(Q.rear - Q.front + MaxSize) %MaxSize
b.用一个额外的元素count记录队列中数目,count==MaxSize 队满
4、双端队列:两端均可以 入队 出队;受限的双端队列 只有一端可以出队或者其他,两端均可入队等
5、堆栈的应用: a、括号匹配
b,表达式求值 还有 递归
以上是关于数据结构--------(堆栈 和 队列)的主要内容,如果未能解决你的问题,请参考以下文章