第三章-栈和队列资料.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* ADT Queue的表示与实现:操作的实现 Status Destroyqueue(LinkQueue Q) { //队列Q存在则销毁Q while(Q.front){ Q.rear=Q.front-next; free(Q.front); Q.front=Q.rear; //NULL } return OK;} 3.4.2 链队列-队列的链式表示和实现 3.4 队列 * 3.4.2 链队列-队列的链式表示和实现 队列运算指针变化情况 ^ Q.front Q.rear Q.front Q.rear ^ x Q.front Q.rear x ^ y Q.front Q.rear x ^ y (a) 空队列 (b) 元素x入队 (c) 元素y入队 (d) 元素x出队 3.4 队列 * ADT Queue的表示与实现:操作的实现 Status EnQueue(LinkQueue Q, QElemType e) {   //队列Q存在,插入元素e为Q的队尾元素   p=(QueuePtr)malloc(sizeof(QNode));   if(!p) exit(OVERFLOW);   p-data=e;p-next=NULL;   Q.rear-next=p;   Q.rear=p; return OK; } 3.4.2 链队列-队列的链式表示和实现 3.4 队列 * 3.4.2 链队列-队列的链式表示和实现 队列运算指针变化情况 ^ Q.front Q.rear Q.front Q.rear ^ x Q.front Q.rear x ^ y Q.front Q.rear x ^ y (a) 空队列 (b) 元素x入队 (c) 元素y入队 (d) 元素x出队 3.4 队列 * ADT Queue的表示与实现:操作的实现 Status DeQueue(LinkQueue Q,QElemType e) {   //Q为非空队列,删除Q的队头元素,并用e返回其值   if(Q.front==Q.rear)return ERROR; //判队空   p=Q.front-next;   e=p-data;   Q.front-next=p-next; //删除P   if(Q.rear==p) Q.rear=Q.front; //删除的是最后一个元素,则需对队尾指针重新赋值(指向头结点),否则将会丢失。   free(p); return OK; } 3.4.2 链队列-队列的链式表示和实现 3.4 队列 * 3.4 队列 3.4.3 循环队列——队列的顺序表示和实现 循环队列: 就是指将队列的存贮区域作循环结构处理,队列的头尾指针的移动均可回绕,将存贮区的第1个元素视为最后一个元素的后继, (同样将最后元素视为第1个元素的前趋)。 显然,在循环队列中,元素出队后空出的位置可被重复使用,又免去了移动元素的工作 * rear front J1 J2 rear front J2 (a)空队列 (b)J1,J2相继  入队列 (c)J1出队 (d)J3,J4和J5相继入队之后,J2出队 rear front 0 1 2 3 4 5 rear front J5 J4 J3 front,rear均为整数 用箭头指示只是为了直观 又有J6入队, 怎么办? 3.4 队列 3.4.3 循环队列——队列的顺序表示和实现 * 3.4 队列 3.4.3 循环队列——队列的顺序表示和实现 下面考虑循环队列的实现 1)先假定队空间的下标范围为0到QueueSize -1, 要实现循环队,只要实现头尾指针回绕即可,其它与上面介绍的非循环队列相同 2)根据模运算特点,将头尾指针加1后按QueueSize取模即可。另一种方法是,对头尾指针加1后是否大于(QueneSize-1),若是则置其为0 * front rear J6 J4 J5 3 1 2 4 0 5 rear 5 4 0 3 1 2 front J6 J7 J8 J9 J4 J5 front rear 5 4 0 3 1 2 (b)队空 (c)队满 队空、队满 都有front=rear 如何判断循环队列 队空、队满? J7 rear 3.4 队列 3.4.3 循环队列——队列的顺序表示和实现 * 3.4 队列 3.4.3 循环队列——队列的顺序表示和实现 下面考虑循环队列的实现 3)为了处理方便,我们假定: 队头指示器:指向队中第1个元素位置 队尾指示器:指向队尾元素的下一个元素位置 在这种情况下,队空与队满的条件分别为: 队空:尾指示器等于头指示器

文档评论(0)

33894522 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档