数据结构课件(栈和队列)

上传人:油条 文档编号:49197950 上传时间:2018-07-25 格式:PPT 页数:65 大小:607.50KB
返回 下载 相关 举报
数据结构课件(栈和队列)_第1页
第1页 / 共65页
数据结构课件(栈和队列)_第2页
第2页 / 共65页
数据结构课件(栈和队列)_第3页
第3页 / 共65页
数据结构课件(栈和队列)_第4页
第4页 / 共65页
数据结构课件(栈和队列)_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《数据结构课件(栈和队列)》由会员分享,可在线阅读,更多相关《数据结构课件(栈和队列)(65页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 1数据结构第三章 栈和队列*第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3

2、队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 2第三章 栈和队列3.1 栈栈和队列也是线性表,只不过是操作受限的线性表。 栈是限定在表尾进行插入或删除操作的线性表。表尾 端称栈顶,表头端称栈底。如图。an.a2 a1栈底栈顶出栈进栈栈顶(TOP)-允许插入和删除的一端。栈底(bottom)-不允许插入和删除的一端。空栈-表中没有元素。 进栈-最先插入的元素放在栈的底部。 退栈-最后插入的元素最先退栈。 所以栈又称为后进先出的线性表( LIFO表,Last In First Out)第三章第三章 3.1 栈 3.1.1栈的

3、类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 33.1 栈3.1.1 栈的类型定义ADT Stack 数据对象:D ai | ai ElemSet, i=1,2,.,n, n0 数据关系:R1 | ai-1, aiD, i=2,.,n 约定an 端 为栈顶,a1 端为栈底。 基本操作: InitStack( /存储空间的基址,数据元 素的

4、数据类型约定为SElemType SElemType * top; /表示栈顶,如果top=base ,表示空栈 int stacksize; /当前分配的存储容量,以 sizeof(ElemType) 为单位 SqStack 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 63 2 1 0Top=b

5、ase 空栈TopbaseA3 2 1 0TOPA进栈base3 2 1 0DCBAB、C、D依次进栈TOPbase3 2 1 0BATOPD、C依次退栈base3 2 1 0B、A退栈baseTOP3.1 栈第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 73.1.2 栈的表示和实现-顺序表示顺序栈

6、基本操作的实现Status InitStack(SqStack if(!S.base)exit(OVERFLOW); S.top=S.base; /置栈S为空栈 S.stacksize=STACK_INIT_SIZE; return OK; /InitStack 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊

7、的线性表 83.1.2 栈的表示和实现-顺序表示顺序栈基本操作的实现Status GetTop(SqStack S,SElemType e=*(S.top-1); return OK; /GetTop 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 93.1.2 栈的表示和实现-顺序表示顺序栈基本操作

8、的实现Status Push(SqStack if(!S.base)exit(OVERFLOW); /存储分配失败 S.stacksize+=STACKINCREMENT; *S.top+=e; return OK; /Push第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 103.1.2 栈的表示和

9、实现-顺序表示顺序栈基本操作的实现Status Pop(SqStack e=*-S.top; return OK; /Pop 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 113.1.2 栈的表示和实现-顺序表示顺序栈基本操作的实现Status DestroyStack(SqStack free(S

10、.base); S.base=NULL; S.top= NULL; return OK; /DestroyStack Status ClearStack(SqStack return OK; /ClearStack 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 123.1.2 栈的表示和实现-顺序表

11、示顺序栈基本操作的实现Status StackEmpty(SqStack S) /如果栈为空栈,则返回TRUE,否则返回 FALSE if(S.top=S.base)return TRUE; else return FALSE; /StackEmpty Status StackLength(SqStack S) /返回栈S的长度 return S.top-S.base; /StackLength第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.

12、2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 133.1.2 栈的表示和实现-顺序表示顺序栈基本操作的实现Status StackTraverse(SqStack S, Status (*visit)(SElemType e) /从栈底到栈顶依次对栈中每个元素调用visit函数,如 果visit失败,则操作失败 if(S.top=S.base)return ERROR; for(i=0;i S.top-S.base;i+) if(visit(S.basei)=ERROR) return ERROR

13、; return OK; /StackTraverse 第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 143.1.2 栈的表示和实现- 链接表示链栈的表示struct Node/* 单链表结点结构 */ ElemType info;struct Node *link; struct LinkStac

14、k/* 链栈类型定义 */ struct Node *top;/* 指向栈顶结点 */LinkStack, *PLinkStack;bat cat eat mat headtopbottom第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序栈 3.1.3链栈 3. 2 栈的应 用举例 3.2.1数制转 换 3.2.2表达式 求值 3.2.3汉诺塔 问题 3.3队列 3.3.2顺序队 列 3.3.3队列的 基本操作 3.3.4队列的 类型定义 3.3.5链队列 的定义 3.3.6循环队 列 3.4几种特殊 的线性表 153.1.2 栈的表示和实现- 链接表示链栈基本操作的实现PL

15、inkStack createEmptyStack_link( ) /创建一个空栈PLinkStack plstack;plstack = (struct LinkStack *)malloc( sizeof(struct LinkStack);if (plstack != NULL) plstack-top = NULL; else printf(“Out of space! n“); return plstack; DataType top_link( PLinkStack plstack ) /* 对非空栈求栈顶元素 */ return plstack-top-info;第三章第三章 3.1 栈 3.1.1栈的类 型定义 3.1.2顺序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号