- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构chap3
第三章 栈和队列
本章介绍在程序设计中常用的两种数据结构
——栈和队列
第三章 栈和队列
3.1 栈
3.2 栈的应用举例
3.3 栈与递归
3.4 队列
学习要点 1 理解掌握栈的结构特征和操作特点; 2 掌握栈的顺序存储结构和链式存储结构,以及如何 用C语言描述它们的类型定义;
3 掌握在两种存储结构下,栈的基本操作的算法;重点掌握顺序存储结构栈的基本操作的算法;
4 理解栈的后进先出的特点及在程序设计中的应用;
5 理解递归算法执行过程中栈的作用及栈的状态变化;
基本内容:
1 栈的概念,栈的基本操作;,2 栈的两类存储结构和它们的类型定义;3 在栈的存储结构下,栈的基本操作的算法;4 栈在程序设计中的应用;
3.1 栈
3.1 栈
3.1 .1 栈的概念
3.1 .2 栈的顺序存储和实现
3.1 .3 栈的链式存储和实现
3.1 栈
栈是限定仅能在表尾一端进行插入、删除操作的线性表
(a1, a2, ... , ai -1, ai , ai+1, …, an )
插入
删除
3.1.1 栈的概念
一 什么是栈
3.1 栈
4)栈的元素具有后进先出的特点,所以栈又称为后进先出表(LIFO表)5)由于进栈、出栈操作总是在栈顶一端进行,通常设置称为栈顶指针的变量指示栈顶的位置。
说明:设(a1, a2, a3, …, an ) 是一个栈
1)表尾称为栈顶,表头称为栈底 ,即a1为栈底元素,an为 栈顶元素,2)在表尾插入元素的 操作称进栈操作,在表头删除元素的操作称为出栈操作;3)元素按a1, a2, a3, …, an 的次序进栈, 第一个进栈的元素一定在栈底,最后一个进栈的元素一定在栈顶, 第一个出栈的元素为栈顶元素;
3.1 栈
栈的示意图
出栈
进栈
栈的特点
后进先出
第一个进栈的元素在栈底,最后一个进栈的元素在栈顶,
第一个出栈的元素为栈顶元素,
最后一个出栈的元素为栈底元素
3.1 栈
栈的基本操作:
1) 初始化操作InitStack((S) 功能:构造一个空栈S;
2) 销毁栈操作DestroyStack(S) 功能:销毁一个已存在的栈;
3) 置空栈操作ClearStack(S) 功能:将栈S置为空栈;
4) 取栈顶元素操作GetTop(S, e) 功能:取栈顶元素,并用e 返回;
5)进栈操作Push(S, e)功能:元素e进栈;
6)退栈操作Pop(S, e) 功能:栈顶元素退栈,并用e返回;
7)判空操作StackEmpty(S) 功能:若栈S为空,则返回True,否则返回False;
3.1 栈
栈操作图示
空栈
A进栈
B C D E 进栈
E D 出栈
3.1 栈
栈的顺序存储结构也是利用一组连续的内存单元依次存放自栈底到栈顶的数据元素,栈顶元素的位置由一个称为栈顶指针的变量指示 。
栈的顺序存贮结构也称为顺序栈
3.1.2 栈的顺序存储和实现
与线性表类似,栈也可以用顺序结构或链式结构存储。
一、栈的顺序存储结构
1 栈的顺序存储结构
3.1 栈
SqStack::结构类型名;
SqStack类型的变量是结构变量,它的三个域分别是:base:称为栈底指针,指向栈底位置;top:称为栈顶指针,约定栈顶指针指向栈顶元素的下(后面)一个位置;Stacksize:用于存放当前分配(存放栈元素)的存储空间的大小;
#define STACK_INIT_SIZE 100 // 栈存储空间的初始分配量#define STACKINCREMENT 10 // 栈存储空间的分配增量typedef struct{SElemType *base; //栈空间基址SElemType *top //栈顶指针int stacksize; //当前分配的栈空间大小
//(以sizeof(SElemType)为单位)}SqStack;
2. 顺序栈的类型定义
3.1 栈
3 顺序栈的图示
3.1 栈
当栈用顺序结构存储时,
栈的基本操作如建空栈、
进栈、出栈等操作如何实现?
3.1 栈
算法
Status InitStack_Sq(SqStack S) { //构造一个空栈S S.base=(SElemTy
文档评论(0)