栈和队列简述

文献种类:专题技术文献;
开发工具与关键技术:
作者: ;年级: ;撰写时间: 年 月 日
文献编号: 归档时间: 年 月 日

栈和队列

开发工具与关键技术:
作者:熊琪
撰写时间:2020年5月7日

堆栈简称为栈,是限定只能在表的一端进行插入和删除操作的性表。在表中,允许插入和删除的一端称作“栈顶,另一端称作“栈底”。通常将元素插入栈顶的操称作为“入栈”(进栈或压栈),称删除栈顶元素的操作为“出栈”, (图1)图片位于最底部!
栈与队列都是特殊的线性表,栈与队列的特征:
LIFO(Last In First Out)
FIFO(First In First Out)
堆栈的基本运算如下:
(1) StackInit()初始化堆栈。
(2) StackEmpty(s) 判定栈s是否为空。
(3) StackLength(s) 求堆栈s的长度。
(4) GetTop(s) 获取栈顶元素的值。
(5) Push(s, e) 将元素e进栈。
(6) Pop(s),出栈(删除栈顶元素)。

栈有两种存储结构:(1)顺序栈——采用顺序结构存储
(2)链栈——采用链式结构存储
顺序栈的存储结构(图2):
#define MaxSize (堆栈可能达到的最大长度)
typedef struct
{ ElementType elem[MaxSize];
 int top;     /栈顶位置/
} SeqStack;
栈满和栈空的条件:栈满:top=Maxsize-1,
栈空:top=-1。

顺序栈的基本运算(图3):
初始化堆栈 StackInit(),
判定栈s是否为空StackEmpty(s)
求堆栈s的长度StackLength(s)
获取栈顶元素的值GetTop(s), 进栈Push(s, e), 出栈Pop(s)。

链栈的储存结构(图4):
#define MAX_SIZE 100 //设置最大元素个
typedef int Elemtype;
typedef struct snode {
ElementType data;
struct snode *next;
}StackNode;
typedef StackNode LinkStack;
/ * LinkStack为指向StackNode 的指针类型
/

队列简称为队,是限定只能在表的一端作插入运算、在另一端作删除运算的线性表;
在表中,允许插入的一端称作“队尾”,允许删除的另一端称作“队首”(或“队头”);
通常将元素插入队尾的操作称作为入队列(或入队),称删除队首元素的操作为出队列(或出队)。(图5)

列队的存储结构(图6):(1)顺序队列——采用顺序结构存储
(2)链式队列——采用链式结构存储

队空:frontrear
队满:rear
Maxsize-1

当rear=MaxSize-1时,队列为满,如果再加入新元素,就会产生"溢出"。但是这种"溢出"并不是真正的溢出,在数组的前端还可能有空位
置,所以这是一种假溢出。可以用循环队列来解决。
为了能够充分的使用数组中的存储空间,把数组的前端和后端连接起来,形成一个环形的表,即把存储队列元素的表从逻辑上看成一个环,成为循环队列(Circular Queue)(图7)。

队空的几种情况(图8):

初始化时:front=rear=0
循环队列为空的条件是:front==rear
队满的几种情况(图9):

循环队列为满的条件是:front==(rear+1) % MaxSize

(图1):
栈和队列简述_第1张图片
(图2):
栈和队列简述_第2张图片

(图3)
栈和队列简述_第3张图片

(图4):
栈和队列简述_第4张图片

(图5):
栈和队列简述_第5张图片

(图6):
栈和队列简述_第6张图片
(图7):
栈和队列简述_第7张图片

(图8):
栈和队列简述_第8张图片
(图9):
栈和队列简述_第9张图片

你可能感兴趣的:(栈和队列简述)