数据结构-03栈和队列详解.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3.4 队列 2.循环队列 是顺序分配存储结构实现的队列。顺序队列除了一个一维数组描述队列中的数据元素,并预设一个数组的最大空间外,还需要为队列设立一个队首指针(front)和一个队尾指针(rear)。通常约定,队列初始化为空时,令front=rear=0,每当插入一个元素时,rear增加1,删除一个元素时front增加1。并且,在队列非空时,头指针指向队列的队首元素,尾指针指向队列队尾元素的下一个位置。 3.4 队列 为什么要引入循环队列? rear front 5 0 1 queue J1 rear rear J2 rear rear J3 rear rear J1 front front J2 front front J4 rear rear J5 rear rear J6 rear rear 空队列 J1,J2,J3入队列 J1和J2相继出列 J4,J5,J6相继入队列 队列中有空闲空间,而无法在队尾插入新的元素 3.4 队列 解决上面矛盾的一个办法是将顺序队列的首尾相接连成一个环状空间——循环队列。在这个环状空间中,队列的头、尾指针与队列元素之间的关系不变。 … MAXSIZE-1 0 1 … q.front q.rear 3.4 队列 如何判断环状队列满或空?请看下面两种情况: Q.rear J5 J6 Q.front Q.front J7 J8 J9 J10 J5 J6 Q.rear Q.front Q.rear 一般情况 队列满 队列空 由此可知,凭借Q.front==Q.rear无法判断环状队列Q是空 还是满。 当环状队列Q为空时: Q.front==Q.rear 当环状队列Q为满时: (Q.rear+1)%Q.queuesize==Q.front 说明:队列为满时少用一个元素空间 3.4 队列 两种判断方法: 设一标志区别队列是空还是满; 少用一个元素空间,约定队首指针在循环队列队尾指针的下一位置上作为队列满的状态标志。 J7 J8 J9 J5 J6 Q.rear Q.front 队列“满” 3.4 队列 循环队列的存储表示部分操作的实现 const QUEUE_INIT_SIZE=100; const QUEUEINCREMENT=10; typedef struct { QElemType *elem //存储队列元素的数组 int front; int rear; int queuesize; //当前最大容量 int incrementsize; //可扩充容量 }SqQueue; 3.4 队列 部分操作的实现 void InitQueue_Sq(SqQueue , int = QUEUE_INIT_SIZE, int =QUEUEINCREMENT); void InitQueue_Sq(SqQueue Q, int maxsize, int incresize) { //构造一个空队列 Q.elem=new QelemType[maxsize+1] Q.queuesize=maxsize+1; Q.incrementsize=incresize; Q.front=Q.rear=0; }//InitQueue_Sq 3.4 队列 int QueueLength_Sq( SqQueue Q) {//返回Q的元素个数 return (Q.queuesize+Q.rear-Q.front)%Q.queuesize; } // QueueLength_Sq 0 1 2 3 4 5 J5 J4 J3 J6 q.rear q.front 3 4 q.rear 1 2 q.front 3 4 q.rear 1 2 q.front 3.4 队列 Status DeQueue_Sq(SqQueue Q,ElemType e) {//若队列不空,删除其队首元素,并用e返回其值 if(Q.front==Q.rear) return FALSE;//队列为空 e=Q.elem[Q.fron

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档