西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第三部分 栈、队列、递归方法(中文)

第3章栈与队列
第3章 栈与队列

目录 栈 2,栈的应用举例 3.栈与递归 k4,队列 5应用实例
目录 1.栈 2. 栈的应用举例 3. 栈与递归 4. 队列 5. 应用实例

3.1 栈 311栈的定义及其运算 栈(Stak)是限定插入和删除运算只能在表尾 进行的线性表。 通常称允许插入、删除的这一端为栈顶,另一端 称为栈底。 当表中没有元素时称为空栈。 其中数据元素的个数n定义为表的长度
3.1 栈 3.1.1 栈的定义及其运算 栈(Stack)是限定插入和删除运算只能在表尾 进行的线性表。 通常称允许插入、删除的这一端为栈顶,另一端 称为栈底。 当表中没有元素时称为空栈。 其中数据元素的个数n定义为表的长度

图3.1是一个栈的示意图,通常用指针top指示栈顶的位 置,用指针 bottom指向栈底。栈顶指针top动态反映栈 的当前位置。 进栈 出栈 图3.1所示的栈中,元素是以a1, a ,an的顺序进栈,而出栈 栈顶 的次序却是an,an1,…,a1 也就是说,栈的修改是按后进先 a2 ai 出的原则进行的。因此,栈又称为 图3.1栈栈底 后进先出( Last in first out)的线性表,简称为 LIFO表
图3.1是一个栈的示意图,通常用指针top指示栈顶的位 置,用指针bottom指向栈底。栈顶指针top动态反映栈 的当前位置。 图3.1所示的栈中,元素是以a1, a2,…,an的顺序进栈,而出栈 的次序却是an,an-1,…,a1。 也就是说,栈的修改是按后进先 出的原则进行的。因此,栈又称为 后进先出(Last In First Out)的线性表,简称为 LIFO表

栈的ADT声明如下: ADTS七ack i Typedef struct Stack s; Initstack(s, maxSize)i 说明:构造空栈S,即栈的初始化 Stacks主ze(S); 说明:求栈中元素的数目 isEmpty(s) 说明:判栈s是否为空栈 isFull(s) 说明:判栈s是否已“满
ADT Stack { Typedef struct Stack S; InitStack(S,maxSize); 说明:构造空栈S,即栈的初始化 StackSize(S); 说明:求栈中元素的数目 isEmpty(S); 说明:判栈S是否为空栈 isFull(S); 说明:判栈S是否已“满” 栈的ADT声明如下:

GetT。P(S,e); 说明:取栈顶元素 Push (S,e) 说明:值为e的数据元素进栈(插入、压栈) P。p(S) 说明:栈顶元素出栈(删除、退栈) }
GetTop(S,e); 说明:取栈顶元素 Push (S,e); 说明:值为e的数据元素进栈(插入、压栈) Pop(S); 说明:栈顶元素出栈(删除、退栈) };

312栈的顺序存储结构 栈的顺序存储结构称为顺序栈,是用一组地址连续的 存储单元依次存放自栈底到栈顶的数据元素。 因为栈底位置是固定不变的,栈顶位置是随着进栈和退栈 操作而变化的,故需用一个变量top来指示当前栈顶位置, 通常称top为栈顶指针,参看图3.2。 a5 目 a4 a 3 2. top a al0 top top-l (a)空栈(b)al进栈(c)a2-a5相继进栈(d)a5a3相继出栈 图32顺序栈中栈顶指针和栈中数据元素之间的关系
栈的顺序存储结构称为顺序栈,是用一组地址连续的 存储单元依次存放自栈底到栈顶的数据元素。 3.1.2 栈的顺序存储结构 因为栈底位置是固定不变的,栈顶位置是随着进栈和退栈 操作而变化的,故需用一个变量top来指示当前栈顶位置, 通常称top为栈顶指针,参看图3.2

我们先以整数元素为例,给出顺序栈的基本 算法,在下一节,将给出顺序栈的模板类接口 定义以及基本运算的实现代码和应用实例。 typedef struct int*elem;//elem是数据元素数组 int top;//′栈顶指针 int maκsize;//栈容量 fsaStacki
Typedef struct { int *elem; // elem是数据元素数组 int top; // 栈顶指针 int maxSize; // 栈容量 }sqStack; 我们先以整数元素为例,给出顺序栈的基本 算法,在下一节,将给出顺序栈的模板类接口 定义以及基本运算的实现代码和应用实例

void Initstack(S, maxsize)∥/栈初始化 I s top=-li selem=new int[maxSize], F bool isEmpty(s)∥判栈空否? i return s top==-1; J bool isU11(S)∥/判栈满否? I return top==S. maxSize-li J bool Push(sqStack s, int e) ∥/值为e的数据元素进栈(插入、压栈) if(isFu11(s))∥/栈满(溢出)无法进栈,返回 false {cout<" ERROR:over£1。w!!n"; return false; 1 s elem [++S top] return true ∥/栈顶指针增1元素进栈返回true
void InitStack(S,maxSize) // 栈初始化 { S.top=-1; S.elem=new int[maxSize]; } bool isEmpty(S) // 判栈空否? { return S.top==-1; } bool isFull (S) // 判栈满否? { return top==S.maxSize-1; } bool Push (sqStack S, int e) // 值为e的数据元素进栈(插入、 压栈) { if(isFull(S)) // 栈满(溢出)无法进栈,返回false { cout << " ERROR: overflow !!\n"; return false; } S.elem[++S.top] = e ; return true ; //栈顶指针增1元素进栈,返回true }

bool Pop( tsTack S)//栈顶元素出栈(删除) 主f( isEmpty(s)//栈空无法删除,返回fa1se cout<<“ ERROR: unders1ow!!n”; return false s. top--i return true; //元素出栈 bool GetTop(sastack s, int &e) //取栈s的栈顶元//素 if( isEmpty(s))/栈空(下溢) cout < ERROR: underflow !!\n return false i e=selem[s top] i return true /元素存e,栈顶指针不变(元素没出栈)
bool Pop(sqStack S) // 栈顶元素出栈(删除) { if(isEmpty(S)) // 栈空无法删除, 返回false { cout << “ ERROR: underflow !!\n” ; return false ; } S.top--; return true; // 元素出栈 } bool GetTop(sqStack S, int &e) // 取栈S的栈顶元//素 { if(isEmpty(S)) // 栈空(下溢) { cout << “ ERROR: underflow !!\n” ; return false ; } e=S.elem[S.top] ; return true ; // 元素存e, 栈顶指针不变(元素没出栈) }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第二部分 线性表(中文).ppt
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第一部分 绪论(中文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第五部分 树结构_多叉树 Chapter 11 MULTIWAY TREES(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第五部分 树结构_二叉树 Chapter 10 BINARY TREES(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第四部分 查找、排列_检索 Chapter 9 Tables And Information Retrieval(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第四部分 查找、排列_排列 Chapter 8 SORTING(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第四部分 查找、排列_查找 Chapter 7 SEARCHING(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第三部分 线性表_线性表 Chapter 6 LISTS AND STRINGS(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第二部分 栈、队列、递归方法_递归 Chapter 5 RECURSION(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第二部分 栈、队列、递归方法_链式栈与队列 Chapter 4 Linked Stacks and Queues(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第二部分 栈、队列、递归方法_队列 Chapter 3 QUEUES(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第二部分 栈、队列、递归方法_栈 Chapter 2 INTRODUCTION TO STACKS(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第一部分 绪论_大规模程序开发 Chapter 1 PROGRAMMING PRINCIPLES(英文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第一部分 绪论_数据结构导言(中文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第一部分 绪论_C++回顾(C++编程简介,中文).ppt
- 西安建筑科技大学:《数据结构与算法》教学资源(课程设计题目任务书)用Dijkstra方法求最短路径.doc
- 西安建筑科技大学:《数据结构与算法》教学资源(课程设计题目任务书)中缀表达式转后缀表达式.doc
- 西安建筑科技大学:《数据结构与算法》教学资源(课程设计题目任务书)查找最短路径.doc
- 西安建筑科技大学:《数据结构与算法》教学资源(课程设计题目任务书)四则运算计算器.doc
- 西安建筑科技大学:《数据结构与算法》教学资源(课程设计题目任务书)图书馆系统.doc
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第四部分 树与二叉树(中文).ppt
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第五部分 图(中文).ppt
- 西安建筑科技大学:《数据结构与算法》课程教学资源(PPT电子教案)第六部分 图结构_图 Chapter 12 GRAPHS(英文).ppt
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第六部分 排序(中文).ppt
- 西安建筑科技大学:《数据结构基础(选修)》课程PPT电子教案_第七部分 查找(中文).ppt
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第一部分 绪论_大规模程序开发 PROGRAMMING PRINCIPLES(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第二部分 栈、队列、递归方法_栈 INTRODUCTION TO STACKS(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第二部分 栈、队列、递归方法_队列 Queues(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第二部分 栈、队列、递归方法_递归 RECURSION(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第二部分 栈、队列、递归方法_链式栈与队列 LINKED STACKS AND QUEUES(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第三部分 线性表_线性表 LISTS(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第四部分 查找、排列_查找 Searching(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第四部分 查找、排列_排列 Sorting(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第四部分 查找、排列_检索 TABLES AND INFORM ATION RETRIEVAL(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第五部分 树结构_二叉树 BINAR Y TREES(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第五部分 树结构_多叉树 MULTIWAY TREES(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课堂笔记_第六部分 图结构_图 Graph(英文).doc
- 西安建筑科技大学:《数据结构基础》课程课外习题_第一部分 绪论.doc
- 西安建筑科技大学:《数据结构基础》课程课外习题_第二部分 线性表_数组.doc
- 西安建筑科技大学:《数据结构基础》课程课外习题_第二部分 线性表_链表.doc