数据结构第3章栈和队列课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构第3章栈和队列课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 课件
- 资源描述:
-
1、 第3章 栈和队列栈和队列3.1栈的概念栈的概念 3.2栈的存储结构栈的存储结构3.3顺序栈的操作算法顺序栈的操作算法 3.4链栈的操作算法链栈的操作算法 3.5栈的应用举例栈的应用举例-表达式求值表达式求值 第3章 栈和队列栈和队列3.6队列的概念队列的概念 3.7队列的存储结构队列的存储结构 3.8循环队列的操作算法循环队列的操作算法 3.9链队的操作算法链队的操作算法 第三章第三章 栈和队列栈和队列 3.1栈的概念栈的概念1.定义:定义:栈栈(Stack)是限定仅在表的是限定仅在表的一端一端进行插入或删进行插入或删除操作的线性表。除操作的线性表。2.栈的示意图栈的示意图 P443.栈的抽
2、象数据类型定义栈的抽象数据类型定义 P453.2 栈的存储结构栈的存储结构有两种存储结构有两种存储结构:顺序顺序栈(常用);栈(常用);链链栈栈1、顺序栈、顺序栈 顺序栈的类型定义:顺序栈的类型定义:/-栈的顺序存储表示栈的顺序存储表示-#define STACK_NINT_SIZE 100;/存储空间初始分配量存储空间初始分配量#define STACKINCREMENT 10;/存储空间分配增量存储空间分配增量typedef struct SElemType*base;/在栈构造之前和销毁之后,在栈构造之前和销毁之后,base的值为的值为NULL SElemType*top;/栈顶指针栈顶
3、指针 int stacksize;/当前已分配的存储空间,以元素为单位当前已分配的存储空间,以元素为单位SqStack顺序栈的结构举例顺序栈的结构举例/-基本操作的函数原型说明基本操作的函数原型说明-Status InitStack(SqStack&S);/构造一个空栈构造一个空栈SStatus GetTop(SqStack S,SElemType&e);/若栈不空,则用若栈不空,则用e返回返回S的栈顶元素,并返回的栈顶元素,并返回OK;否则返回;否则返回ERRORStatus Push(SqStack&S,SElemType e);/插入元素插入元素e为新的栈顶元素为新的栈顶元素Status
4、 Pop(SqStack&S,SElemType&e);/若栈不空,则删除若栈不空,则删除S的栈顶元素,用的栈顶元素,用e返回其值,并返回返回其值,并返回OK;否则返回否则返回ERROR 2、链栈、链栈 链栈的类型定义:链栈的类型定义:typedef struct LNode/typedef struct LNode/结点类型结点类型 ElemType data;ElemType data;struct LNode struct LNode*next;next;Lnode,Lnode,*Linkstack;Linkstack;Linkstack S;Linkstack S;3.3 顺序栈的操作
5、算法顺序栈的操作算法 1建立一个空栈建立一个空栈Status InitStack(SqStack&S)/构造一个空栈构造一个空栈S S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(overflow);/存储分配失效存储分配失效 S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;/InitStack2.取栈顶元素取栈顶元素Status GetTop(SqStack S,SElemType&e)/若栈不空,则用若栈不空,则用e返回返回S的栈顶元
6、素,的栈顶元素,并返回并返回OK;否则返回;否则返回ERROR if(S.top=S.base)return ERROR;e=*(S.top-1);return OK;/GetTop 3.压栈压栈pushStatus Push(SqStack&S,SElemType e)/插入元素插入元素e为新的栈顶元素为新的栈顶元素 if(S.top-S.base=S.stacksize)/栈满,追加存储空间栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base
7、)exit(OVERFLOW);/存储分配失败存储分配失败 S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;/push 4.出栈出栈popstatus Pop(SqStack&S,SElemType&e)/若栈不为空,则删除若栈不为空,则删除S的栈顶元素,用的栈顶元素,用e返回其值,并返回其值,并返回返回OK;否则返回;否则返回ERROR if(S.top=S.base)return ERROR;e=*-S.top;return OK;/Pop 5 判断栈是否为空判断栈是否为空int Empty(
8、SqStack S)/若栈为空,则返回若栈为空,则返回0,否则返回,否则返回1 if(s.top=s.base)return(0);else return(1);6 判断栈是否为满判断栈是否为满int Full(SqStack S)/若栈为满,则返回若栈为满,则返回0,否则返回,否则返回1 if(s.top-s.base)=s.stacksize return(0);else return(1);3.4 链栈的操作算法链栈的操作算法(自学)(自学)1.建立一个空栈(不带头结点)建立一个空栈(不带头结点)Status InitLStack(Linkstack&S)S=NULL;return ok
9、;/InitLStack2.2.取栈顶元素取栈顶元素Status GettopLStack(Linkstack&S,SElemType&e)/若栈不为空,则用若栈不为空,则用e返回返回S的栈顶元素,并返回的栈顶元素,并返回OK,否则返回否则返回ERROR.if(S=NULL)return ERROR;e=S-data;return(OK);/GettopLStack 3.3.压栈压栈PushPushStatus PushLStack(Linkstack&S,SElemType e)Status PushLStack(Linkstack&S,SElemType e)/插入元素插入元素e e为新的
10、栈顶元素为新的栈顶元素Lnode Lnode*p;p;p=(Lnode p=(Lnode*)malloc(sizeof(Lnode);)malloc(sizeof(Lnode);p-data=e;p-data=e;p-next=S;p-next=S;S=p;S=p;/PushLStack/PushLStack 4.4.出栈出栈PopPopStatus PopLStack(Linkstack&S,SElemType&e)/若栈不为空,则删除若栈不为空,则删除S的栈顶元素,的栈顶元素,用用e返回其值,并返回返回其值,并返回OK,否则返回,否则返回ERROR if(s=NULL)return ERR
11、OR;e=S-data;S=S-link;return OK;/PopLStack 5.判断栈是否为空判断栈是否为空int link_empty(Linkstack&S)/若栈为空则返回若栈为空则返回1,否则返回,否则返回0 if(S=NULL)return(1);else retrun(0);3.5 3.5 栈的应用举例栈的应用举例1-1-数制转换数制转换非负十进制整数转换非负十进制整数转换为八进制数为八进制数 1348D 2504ON N DIV 8N MOD 81348168416821021252023.5 3.5 栈的应用举例栈的应用举例2-2-表达式求值表达式求值算法的基本思想是:
展开阅读全文