- 24
- 0
- 约2.2万字
- 约 76页
- 2017-09-25 发布于北京
- 举报
第三章 栈与队列 3.1 堆栈的定义 3.1.1 堆栈的逻辑结构 堆栈(也简称栈)是一个线性表,其数据元素只能从这个有序集合的同一端插入或删除,这一端称为堆栈的栈顶(top),而另一端称为堆栈的栈底(bottom)。 堆栈是限定只能在表头(或表尾)进行插入和删除运算的线性表。表头(或表尾)是开放运算的栈顶,另一端是封闭运算的栈底。 栈为后进先出表或先进后出表,简称LIFO(Last in first out)或FILO(First in last out)表。 3.1.2 堆栈的抽象数据类型 3.2 堆栈的顺序存储及操作 3.2.1 堆栈顺序存储 1. 堆栈顺序存储概念 堆栈占用的第一个存储单元的地址,就是堆栈的首地址,也是堆栈中栈底元素(e0)存放的位置。 假设堆栈中每个数据元素占用size字节空间,top指向(top=n-1)堆栈中进栈元素的栈顶元素,即栈顶元素的地址,MaxSize表示堆栈可以存储元素的最大空间。一般约定下标为0的元素空间就是栈底,这样就不再另设一变量再来记录栈底指针bottom。 利用公式: location(ei)=location(e0)+i×size 求取堆栈中元素ei的地址。但是,由于堆栈是一个受限的线性表,所以,一般情况下不作取中间数据元素的运算。 2.堆栈顺序存储结构定义 typedef struct { EType *element; int top; int MaxSize; } Stack; Stack S,S1,S2; Stack是一个顺序存储的堆栈,其中element是一个一维数组,每个数组元素空间用于存放堆栈元素数据值,top指向堆栈栈顶元素,MaxSize记载堆栈可存储的最多数据元素。 最后用Stack定义了三个堆栈:S,S1,S2。 3.2.2 堆栈顺序存储结构下的操作 1.构造空堆栈 空堆栈是指堆栈中没有一个数据元素,但数据元素的空间和堆栈结构已产生 空堆栈产生后,就存在一个EType类型的数组,大小是MaxSize,表中只有存放数据元素的空间,堆栈栈顶指针设为-1(用户约定),即堆栈为空时,栈顶指针“指向”栈底空间的前面。 构造空堆栈S算法(Creat) viod CreatStack (Stack S , int MaxStackSize) {// 构造一个最大容量为MaxStackSize 的堆栈S S.MaxSize = MaxStackSize; S.element = new EType [S.MaxSize]; S.top = -1; } 2.判断堆栈是否为空 所谓堆栈为空,是指堆栈中没有一个数据元素,即栈顶指针top指向数据空间的第一个位置(0下标的空间)的前面。如堆栈不空,top总是指向栈顶元素(top的值为非-1)。 判断堆栈S是否为空算法(IsEmpty) bool IsEmpty(Stack S) {// 判断堆栈S是否为空 if (S.top == -1) return true; return false; } 3.判断堆栈是否为满 所谓堆栈为满,是指堆栈的所有数据空间已经全部用完,即栈顶指针top指向数据空间的最大下标位置(MaxSize-1下标的空间)。如堆栈不满,top总是指向栈顶元素(top的值小于MaxSize-1)。 判断堆栈S是否为满算法(IsFull) bool IsFull(Stack S) {// 判断堆栈S是否为满 if (S.top = S.MaxSize-1) return true; return false; } 4.返回栈顶元素的值 返回堆栈栈顶元素的值,是指将top所指的堆栈元素的值取出,但是top指针不移动,当然,能够取得栈顶值的前提是栈中有元素存在。 返回栈S栈顶元素的值(GetTop) Status GetTop(Stack S , EType x) {// 返回堆栈S中栈顶元素 if (IsEmpty (S)) return ERROR; x = S.element[S.top]; return OK; } 5. 进栈(又称压入)运算 进栈运算是将一新元素x存储到当前top所指的空间的“上”一个位置,即top+1的的元素空间中。进栈时,首先要判断堆栈中是否存在元素存放的空间,即先判断栈是否满,不满时,x可以进栈,否则出错。x进栈前,top指针要先做相应地移动。 进栈(压入)算法(Push) Status Push(Stack S , EType x) {// x进s栈,返回进栈后的状态值 if (IsFull(S)) return ERROR; S.top++;
您可能关注的文档
最近下载
- 2025年八年级语文上册《钱塘湖春行》古诗鉴赏对比阅读训练含答案.docx VIP
- 国盛证券-钢铁行业2026年度策略-人间正道是沧桑.pdf VIP
- 2026年全球锂电池正极材料行业报告.docx
- 故障录波识图基础及典型故障分析.pptx VIP
- 粮库安全生产解读课件.ppt VIP
- 五年级下册英语教案unit1lesson5whataretheydoing教案.docx VIP
- 杜邦 PA66 Zyte l101F NC010 未增强 尼龙66.pdf VIP
- 设计变更与签证管理流程.docx VIP
- 压疮的培训(压疮小组).ppt VIP
- 医疗器械生产质量管理规范(2025版)培训试题(含答案).docx
原创力文档

文档评论(0)