版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.1 栈 3.1.1 抽象数据类型栈的定义 3.1.2 栈的表示与实现 3.4 队列 3.4.1 抽象数据类型队列的定义 3.4.2 链队列 - 队列的链式表示与实现 3.4.3 循环队列 - 队列的顺序表示与实现,第三章 栈和队列,栈(stack):仅在表尾进行插入和删除操作的线性表。 或后进先出(LIFO)的线性表。 或先进后出(FILO)的线性表。 栈顶(top): 线性表的表尾端。 栈底(bottom): 线性表的表头。,3.1 栈,例: 假定有五个元素a,b,c,d,e依次进栈,进栈过程中允许出栈 ,则栈的不可能的输出序列是_。 A e d c b a B d e c b a C
2、d c e a b D a b c d e,3.1.1 栈的抽象数据类型,ADT Stack 数据对象:D = ai | aiElemset, i=1,2,n, n0 数据关系:R1 = ai-1,ai|ai-1,ai D, i=2,3,n 约定an为栈顶, a1为栈底。 基本操作: InitStack( StackTraverse(S,visit () ADT Stack,3.1.2 栈的表示与实现,栈的顺序表示-用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。 #define STACK_INIT_SIZE 100/存储空间初始分配量 #define STACKINCREMENT
3、10/存储空间分配增量 typedef struct SElemType *base; / 在栈构造之前和销毁之后,base的值为NULL SElemType *top; / 栈顶指针 int stacksize; /当前已分配的存储空间,以元素为单位 SqStack;,顺序栈示意图,栈顶指针和栈中元素之间的关系,顺序栈的基本操作算法描述(初始化),Status InitStack(SqStack / InitStack,Status GetTop( SqStack s, SElemType / GetTop,顺序栈的基本操作算法描述(取栈顶元素),Status Push( SqStack /
4、Push,顺序栈的基本操作算法描述(入栈),Status Pop( SqStack / Pop,顺序栈的基本操作算法描述(出栈),试分析算法实现的功能:,void Sample1( Stack ,3.4 队列,队列(Queue): 先进先出(First In First Out) (缩写为FIFO)的线性表。 仅在队尾进行插入和队头进行删除操作的线性表。 队头(front): 线性表的表头端,即可删除端。 队尾(rear): 线性表的表尾端,即可插入端。,队头,队尾,.,a1,a2,a3,an-1,an,队列的抽象数据类型,ADT Queue 数据对象:D = ai | aiElemset,
5、i=1,2,n, n0 数据关系:R1=ai-1,ai|ai-1,ai D, i=2,3,n 约定an为队尾, a1为队头。 基本操作: InitQueue( QueueTraverse(Q ,visit () ADT Queue,3.4.2 链队列 - 队列的链式表示与实现,typedef struct QNode QElemType data; struct QNode *next; QNode, *QueuePtr; typedef struct QueuePtr front; /队头指针 QueuePtr rear; /队尾指针 LinkQueue;,data,*next,front,
6、rear,链队列示意图,(a)空队列,(b)元素“x”入队列,(c)元素“y”入队列,(d)元素“x”出队列,链队列的操作实现-构造空的队列,Status InitQueue(LinkQueue / InitQueue,链队列的操作实现- 销毁队列,Status DestroyQueue(LinkQueue / DestroyQueue,链队列的操作实现-入队,Status EnQueue(LinkQueue / EnQueue,链队列的操作实现-出队,Status DeQueue(LinkQueue / DeQueue,3.4.3 循环队列 -队列的顺序表示与实现,/-(循环)队列的动态分配
7、顺序存储结构 - #define MAXQSIZE 100 typedef struct QElemType *base; / 存储空间基地址 int front; / 队头指针 int rear; / 队尾指针 SqQueue;,采用顺序存储结构 约定: 1)初始空队列:Q.front = Q.rear=0 ; 2)插入新的元素时, Q.rear+; 3)删除队头元素时, Q.front+;,循环队列的头尾指针,将顺序队列臆造为一个环状的空间,称之为循环队列(Circular Queue)。,求队列长度:(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE. 判断对列为满:(
8、Q.rear+1)%MAXQSIZE=Q.front. 判断队列为空:Q.rear=Q.front.,循环队列-队列的顺序存储结构实现(初始化),Status InitQueue(SqQueue / InitQueue,队列的顺序存储结构实现(求队列长度),int QueueLength(SqQueue Q) /返回Q的元素个数,即队列的长度 return (Q.rear-Q.front+MAXQSIZE) % MAXQSIZE; ,循环队列-队列的顺序存储结构实现(入队),Status EnQueue(SqQueue / EnQueue,循环队列-队列的顺序存储结构实现(出队),Status DeQueue(SqQueue / DeQueue,本章小结,掌握栈和队列这两种抽象数据类型的特点。 熟练掌握栈类型的顺序表示与实现,即顺序栈的基本操作实现算法,特别应注意栈满和栈空的条件以及它们的描述方法。 熟练掌握循环队
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年神经内科知识考前冲刺测试卷带答案详解(达标题)
- 湖中大黄帝内经课件15-中编-论治-阴阳应象大论
- 2026年国开机械基础考试押题卷(能力提升)附答案详解
- 2026年《建筑构造与识图》习考前冲刺测试卷及答案详解(基础+提升)
- 稽留流产清宫术护理个案查房课件
- 儿童基孔肯雅热中西医结合诊治专家共识课件
- 2025-2030年儿童故事机企业制定与实施新质生产力战略分析研究报告
- 2025-2030年冷链物流库存预警系统行业深度调研及发展战略咨询报告
- 2025-2030年智能农产品追溯行业深度调研及发展战略咨询报告
- 2025-2030年耐用消费品行业盈利模式创新与变革分析研究报告
- 压力容器焊工证考试题及答案
- 教改项目结项汇报
- 2025年辅警笔试考试试题库题库及答案
- 经颅多普勒静脉盗血课件
- 网络与数据安全培训课件
- 有趣的数字0教学课件
- 学会买东西劳动教案
- 浙江省S9联盟2024-2025学年高一下学期4月期中联考数学试题(解析版)
- 清宫寿戏《双福寿》文本考证与演出演变研究
- 企业安全生产总体和年度安全生产目标
- 甲沟炎切开引流术后护理查房
评论
0/150
提交评论