数据结构03栈和队列幻灯片.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章小结 讨论: 线性表、栈与队的异同点 相同点: 逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 不同点: ① 运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。 ② 用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、多道作业处理和简化设计等。 ???? 1. 第三章 栈和队列 主要内容 栈的定义及其基本操作 1 顺序栈及链栈的实现 2 队列的定义及其基本操作 3 循环队列及链队列的实现 4 栈和队列的应用 5 教学要求 教学重点 教学难点难点 目标和要求 1.理解栈的定义、特征及其所定义的基本操作 2. 掌握在两种存储结构上对栈的基本操作的实现 3.理解队列的定义、特征及其所定义的基本操作 4. 掌握在两种存储结构上对队列的基本操作的实现 1.栈的定义及逻辑特点 2. 顺序栈和链栈的存储结构及操作实现 3.入栈、出栈等操作在顺序栈和链栈上的操作 4. 队列栈的定义及逻辑特点 5. 顺序队列、循环队列和链队列的存储结构及操作实现 6.入队,出队等操作在循环队列和链队列上的操作 1.顺序栈的溢出判断条件 2.栈的应用 3.循环队列的队空、队满判断条件 4.循环队列上的插入、删除操作 3.1.1栈的定义及其基本操作 栈:限定结点插入和删除只能在同一端进行的线性表 an an-1 ... a2 a1 进栈 出栈 栈顶指针 (top) 栈底指针 (bottom) 栈顶元素 栈底元素 一个重要特点: 最后压入的结点最先弹出,最先压入的结点只能最后弹出 LIFO表(Last In First Out ) 栈顶指针 (top) 栈底指针(bottom) 空栈 1.栈的定义 栈顶指针和栈底指针都等于0时,栈为空 1 创建栈 2 判栈空 3 压栈 4 弹栈 5 读栈 6 置栈空 7 求栈长度 2.栈的基本操作 3.1.2顺序栈及其操作 1.栈的顺序存储结构 顺序存储结构存储的栈称为顺序栈,用一个一维数组存储 栈顶指针不是指针类型,而是一个整数 C语言描述顺序栈 #define DT char #define M 100 typedef struct { DT data[M]; int top; }SEQSTACK; 指示栈顶元素在顺序栈中的位置 顺序栈上的操作 创建栈 SEQSTACK INISTACK() { SEQSTACK S; S.top =0; return(S); }` 首先根据栈的数据类型说明一个栈S,再置栈顶指针为0 栈顶(top)=0 顺序栈上的操作 判栈空:设S是SEQSTACK类型的变量,栈底位置在向量的低端,s–top=0表示空栈 top=0 M 1 栈空 栈顶指针top,指向实际栈底后的空位置,初值为0 top M 1 压栈 ... B C D E F top top top top top 栈满 2 3 4 M 1 A B C D 弹栈 top top top top top 栈空 设数组大小为M top=0,栈空,此时出栈,则下溢(underflow) 注意:弹栈算法并未说明对删除了的结点的处置 设数组大小为M top=M,栈满,此时入栈,则上溢(overflow) 压栈:s–top是正向增加的,即进栈时需将s–top加1 弹栈:退栈时需将s–top 减1 顺序栈上的操作 读栈 把栈S的栈顶结点数据读出作为函数的返回值 1 2 3 4 0 A B C D E top 返回值 读栈 char GETSTACK(SEQSTACK S) { if (S.top==0) {printf(empty!); return \0; } else return(S.data[S.top]); } S.data[S.top] 注意:该算法并未改变栈的状态,即已读出的结点仍保存在原处不变 3.1.3链栈及其操作 1.栈的链存储结构 链存储结构存储的栈称为链栈,链栈的结点由结点数据和next指针构成。 链栈的结点类型: #define DT char typedef struct snode { DT data; struct snode *next; }STACKNODE; 结点通过next指针链接起来 链栈的结点数据 结点数据 指针 data next 插入和删除总是在链的

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档