第 六 讲 栈和队列(一).

Slides:



Advertisements
Similar presentations
急救基本概念急救基本概念 (First Aid) part 1 蕭佩珍老師 蕭佩珍老師. 天外奇蹟 ( 野外求救篇 ) 影片.
Advertisements

第四章 衛生保健及急救 組員: 4990U002 何易芳 4990U021 張書涵 4990U035 沈采柔 4990U036 王孜瑜 4990U039 許佳靜 4990U043 黃懿華 4991U002 柳瑋翎 4991U008 陳禹伶 第五組.
课程目标: 知识:了解湄公河平原的自然环境及当地人们的 生产生活特色。 能力:阅读地图能说出湄公河平原在世界的位置 ;在地形图、气温曲线图和降水量柱状图中获 取有用信息,综合分析湄公河平原环境特点。 情感态度:理解区域特色是自然条件和社会条件 共同作用的结果,树立因地制宜的观念。 课程重点:湄公河平原的自然环境,稻作区人们.
next 漳州市华侨中学 林女珍 next 以生活为基础提炼而成的程式性动作,和虚拟性 的空 间处理。着重运用讲究唱、做、念、打艺术, 表演动作富于舞蹈性,技术性很高。 戏曲是中国传统的戏剧形式 早在原始社会歌舞已有萌芽,在漫长发展的过程 中,经过八百多年不断地丰富、革新与发展,才 逐渐形成比较完整的戏曲艺术.
1.2 应用举例 ( 一 ). 复习引入 B C A 1. 什么是正弦定理? 复习引入 B C A 1. 什么是正弦定理? 在一个三角形中,各边和它所对 角的正弦的比相等,即.
第三章 蒙太奇与长镜头 20世纪20年代,前苏联电影理论家谢尔盖·爱森斯坦以感性思维和理性思维的辩证法为依据,提出了系统研究电影特性的美学理论和实践原则,即蒙太奇理论,这一理论后来也泛指有关剪辑和分镜头的理论。 爱森斯坦之外,库里肖夫、普多夫金、维尔托夫等人对蒙太奇理论做出了重要贡献。前苏联蒙太奇学说体系中,以爱森斯坦的“冲突论”和普多夫金的“组合论”最具纲领性。
動畫與遊戲設計 Data structure and artificial intelligent
----银行间的比较 论资本构成与充足率 淡 彩 的 黑 板 淡 彩 的 黑 板 金融73班 王艺霏 王 英
数据结构——树和二叉树 1/96.
第六章 树和二叉树.
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
数据结构与算法 数据结构与算法实验
第四章 计算科学教学计划与课程体系 4.1 计算科学(专业)的培养规格和目标
第六章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
Linked List Operations
第3章 栈和队列 3.1 栈 3.2 队列 3.3 应用.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
佇列 (Queue).
佇列與推疊 (Queue and Stack)
資料結構 第5章 佇列.
Chap 3 堆疊與佇列 Stack and Queue.
复习.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
第 12 章 交流電源 …………………………………………………………… 12-1 單相電源 12-2 單相三線式 ※ 12-3 三相電源.
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第3章 栈和队列(二) 1/.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
堆疊 Stack chapter 4 德明科技大學資訊科技系.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
进程操作.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第 3 讲 线性表(一).
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列.
第3章 栈和队列(一).
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第二章 线性表.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
第一章 绪论.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
栈和队列练习.
6.3 遍历二叉树和线索二叉树(知识点二) 遍历二叉树 一、问题的提出
第三章 栈和队列.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
資料結構 第4章 堆疊.
引例 问题1 从甲、乙、丙3名同学中选出2名参加某天的一项活动,其中1名同学参加上午的活动,1名同学参加下午的活动,有多少种不同的方法?
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
练习: 由三个不同的英文字母和三个不同的阿拉伯数字组成一个六位号码(每位不能重复),并且3个英文字母必须合成一组出现,3个阿拉伯数字必须合成一组出现,一共有多少种方法?
§3-4三角形的邊角關係 重點:三角形邊角間的不等關係 (1)三角形任意兩邊和大於第三邊 (2)三角形任意兩邊差小於第三邊
王玲 第 2 章 线性表 王玲 2019/2/25.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第六章 树和二叉树 £6.1 树 £6.2 二叉树 £6. 3 二叉树的存储结构 £6.4 二叉树的遍历与线索化 £6.1.1 树的定义
Linked Lists Prof. Michael Tsai 2013/3/12.
Chap2 Stack & Queue.
Lucene 算法介绍 IR-Lab 胡晓光.
C++程序设计 吉林大学计算机科学与技术(软件)学院.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
全台灣最美的日出好美…好美… 這就是傳說中的潑墨二寮,耳聞她的日出有如國畫般 所以稱為潑墨二寮
7.2 正弦公式 附加例題 1 附加例題 2.
10.3 水平面上的方位角.
Chapter 2 Entity-Relationship Model
梅竹賽 第二次公聽會
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
Presentation transcript:

第 六 讲 栈和队列(一)

教学目标 了解栈基本概念; 掌握栈的顺序表示及其实现; 了解栈的链式表示及其实现。 2/14

前言:上两次课讲了线性表,线性表的特点是:元素与元素之间是一一对应关系,在日常生活中,线性表的例子比比皆是如学生基本信息表,图书信息表等,我们可以对线性表做初始化、查找、插入、删除等操作。下面我们再来看几个现实生活中的例子,一叠盘子,一桶羽毛球,这也符合线性表的特点,元素与元素之间是一一对应的关系,但是我们只能在一端进行插入和删除,如取走盘子,放新盘子,这就是这一节课给大家讲的一种数据类型:栈。

栈(stack) 栈和队列是两种特殊的线性表,是操作受限的线性 表,称限定性DS 栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) an a1 a2 ……... 栈底 栈顶 ... 出栈 进栈 栈s=(a1,a2,……,an)

例1: 对于一个栈,给出输入项A、B、C,如果输入项序列 由ABC组成,试给出所有可能的输出序列。 A进 A出 B进 B出 C进 C出 ABC A进 A出 B进 C进 C出 B出 ACB A进 B进 B出 A出 C进 C出 BAC A进 B进 B出 C进 C出 A出 BCA A进 B进 C进 C出 B出 A出 CBA 不可能产生输出序列CAB

例2:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗? 12345的输出呢? 43512不可能实现,主要是其中的12顺序不能实现; 12345的输出可以实现,只需压入一个立即弹出一个即可。

3.1.1 抽象数据类型栈的定义 ADT Stack { 数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 } 数据关系:R1={ <ai-1, ai >| ai-1, ai∈D, i=2,...,n },约定an 端为栈顶,a1 端为栈底。 基本操作: Push(&S, e) 初始条件:栈S已存在。 操作结果:插入元素e为新的栈顶元素。 Pop(&S, &e) 初始条件:栈S已存在且非空。 操作结果:删除S的栈顶元素,并用e返回其值。 … } ADT Stack 7/14

3.1.2 栈的表示与实现 顺序栈 链式栈 静态分配或动态分配 栈顶指针top是整数或指针 3.1.2 栈的表示与实现 顺序栈 静态分配或动态分配 栈顶指针top是整数或指针 栈顶指针top指向栈顶元素或 指向栈顶元素的下一个位置 链式栈 a1 top top  8/14

顺序栈的数据类型定义 typedef struct{ SElemType *base; // 栈底 int top; //栈顶指示器 下标表示法 typedef struct{  SElemType *base; // 栈底  int top; //栈顶指示器 int stackSize; }SqStack;  指针表示法 typedef struct{  SElemType *base; // 栈底  SElemType *top; //栈顶指针 int stackSize; }SqStack ; 9/14

顺序栈 栈空 栈满 top top top 1 2 3 4 5 A B C D E F 1 2 3 4 5 top 1 2 3 4 5 F A B C D E F 1 2 3 4 5 top 1 2 3 4 5 F top top E top top D top top C top top B top top A base base base 栈空 出栈 进栈 栈顶指针top,指向实际栈顶 后的空位置,初值指向栈底,即top=base 设数组维数为stacksize top=base,栈空,此时出栈,则下溢(underflow) top=base+stacksize,栈满,此时入栈,则上溢(overflow)

顺序栈的基本操作-初始化 #define MAXSIZE 100 Status initStack(SqStack &S){ S.base= (SElemType *) malloc(INIT_SIZE*sizeof(SElemType)) if (S.base = =NULL) return FALSE; S.top = S.base ; S. stackSize = MAXSIZE ; return TRUE; } // initStack top  11/14

顺序栈的基本操作-入栈 if (S.top-S.base= =S.stacksize) return ERROR; Status Push(SqStack &S,SElemType e){  if (S.top-S.base= =S.stacksize) return ERROR;  *S.top++=e; //新元素入栈后栈顶指针移动  return OK; }//Push top a1 top  12/14

顺序栈的基本操作-出栈 Status Pop(SqStack &S,SElemType &e){  if (S.top==S.base ) return ERROR;   e =*--S.top;   return OK; }//Pop top a1 top  13/14

取栈顶元素 int GetTop(SqStack S, SElemType &e){  if (S.top==S.base ) return ERROR;   e =*--S.top; 如何修改?   return OK; }//Pop top a1 top  14/14

链栈的数据类型定义 typedef struct LSNode{ SElemType data; //数据域  SElemType *next; //指针域 }LSNode,*LinkStack; 思考:栈顶设置应该在什么地方? 15/14

链栈的基本操作-入栈 p = (LinkStack)(malloc(sizeof(LSNode))); P->data = e; p->next = s->next; s->next = p; 16/14

栈顶的基本操作-出栈 p = s->next; s->next = p->next; e= p->data ; free (p); 17/14

小结 本讲主要介绍了抽象数据类型栈的定义,顺序栈和链栈的基本操作及其实现。重点介绍了顺序栈的入栈和出栈操作。 18/14

作业与实验 作业 实验 实验二 栈的操作及其应用 如果序列1,2,3按顺序进栈,则可能得到的出栈序列是什么?如果序列1,2,3,4,5,6按顺序进栈,则能否得到435612和135426的出栈序列? 设有两个顺序栈S1和S2共享一个存储区S[0:m-1],为了尽量利用存储空间减少溢出的可能性,采用栈顶相向、迎面增长的存储方式,要求分别设计两个栈的入栈和出栈操作。 回文判断(P91,2.2题) 实验 实验二 栈的操作及其应用 19/14