数据结构 第03章 栈和队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.1 栈(stack) 二、栈的图示 三、栈的基本操作 三、栈的基本操作 3.1.2 栈的顺序表示与实现 3.2 栈的应用举例 //遇到),] 或},弹出栈顶字符 case ): Pop(S, e); if ( e != ( ) tag=0; break; // 若栈顶不是对应的(,[或{,则置tag为0; ………………………… } // end of switch ch++; // 继续判断下一个字符 e=\0; // 将e清空,以便存放下一次出栈的字符 } // end of while // 如果栈为空且tag为1,则配对成功 if ((tag==1) (S.top==S.base)) printf(match! \n); else printf (not match! \n); } 3.3 栈与递归 例: n=3 时圆盘移动的过程如下图所示: 3.4 队 列(queue)  5 、取队头元素操作 GetHead(Q,e) 功能:取队头元素,并用 e 返回;  6、 入队操作 EnQueue( Q, e ) 功能:将元素 e 插入 Q 的队尾;  7、出队操作 DeQueue( Q, e) 功能:若队列不空,则删除 Q 的队头元素,用 e 返回其值,并返回OK,否则返回ERROR。 3.4.2 队列的顺序表示和实现 一、 队列的顺序存贮结构   队列的顺序存储结构是用一组地址连续的存储单元依次存放队列中的各个元素,并用指针front指向队头,指针 rear 指向队尾 。   顺序队列常常会出现“假溢出”现象,如右图所示。    虽然队列中还有一定的存储空间,但因为front指针与rear指针均向同一个方向移动,导致该队列不能再进行入队操作。 为了避免“假溢出”,可以规定:    一旦 rear指针(或 front指针)指向了存储空间的末尾位置,    如果此时再进行入队(或出队)操作,则将相应的指针平移到数组的起始位置,    即是将队列假想为一个循环的环状空间,我们称之为循环队列。 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 三、循环队列操作图示 四、循环队列基本操作的实现 报数问题算法描述--P.69 二、链队列的类型定义-- P.66 typedef struct QNode // 链队列结点的类型定义 { QElemType data; struct QNode *next; }QNode , *QueuePtr; typedef struct // 链队列表头结点的类型定义 { QueuePtr  front; // 队头指针,指向链表的头结点 QueuePtr  rear; // 队尾指针,指向队尾结点 }LinkQueue; 设Q为LinkQueue类型的变量,Q为链队列的表头结点,用于 存储队列队头指针和队尾指针。 链队列的 表头结点 链队列的 头结点 空链队列 J1 ∧ Q.front Q.rear J2 ∧ 非空链队列 Q.front Q.rear ∧ 1、初始化队操作--P.66(1) int InitQueue( LinkQueue Q ) { // 建一个空队列Q Q.front=Q.rear=(QueuePtr) malloc (sizeof(QNode)); // 为链队列的头结点分配空间 if ( !Q.front ) exit (OVERFLOW); Q.front-next=NULL; return OK; } 三、 链队列基本操作的算法 Q.front Q.rear ∧ 空链队列 2、销毁队操作 int DestroyQueue( LinkQueue Q ) { // 销毁队列Q if (!Q.front) return ERROR; // 链队列不存在 while(Q.front) // 回收链队列的所有元素结点空间 { Q.rear=Q.front-next;

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档