数据结构-从概念到C++实现(第4版)课件 3-3队列_第1页
数据结构-从概念到C++实现(第4版)课件 3-3队列_第2页
数据结构-从概念到C++实现(第4版)课件 3-3队列_第3页
数据结构-从概念到C++实现(第4版)课件 3-3队列_第4页
数据结构-从概念到C++实现(第4版)课件 3-3队列_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3-3队列v第三章栈和队列队列的逻辑结构队列的顺序存储结构及实现队列的链式存储结构及实现学什么?循环队列和链队列的比较3-3-1队列的逻辑结构v第三章栈和队列队列的定义队列:只允许在表的一端进行插入操作,在另一端进行删除操作(a1,a2,…,an-1,an)队尾:允许插入的一端,相应地,位于队尾的元素称为队尾元素a1

a2

an栈a1

a2

an队列队头队尾队头:允许删除的一端,相应地,位于队头的元素称为队头元素队列的操作特性插入:入队、进队任何时候执行出队操作,一定是哪个元素呢?队列的操作特性:先进先出(FirstInFirstOut,FIFO)a入队出队bc例:有三个元素按a、b、c的次序依次入队,且每个元素只允许进一次队,则出队序列是什么?答:出队序列只有一种情况:abc删除:出队空队列:不含任何数据元素的队列

队列的抽象数据类型定义ADTStackDataModelOperationendADT队列中元素具有相同类型及先进先出特性,相邻元素具有前驱和后继关系InitQueue:队列的初始化DestroyQueue:队列的销毁EnQueue:入队DeQueue:出队GetQueue:取队头元素Empty:判空与栈类似,队列的基本操作是确定的InitQueue

输入:无功能:初始化队列,创建一个空队列输出:无DestroyQueue

输入:无功能:销毁队列,释放队列所占用的存储空间输出:无EnQueue

输入:元素值x

功能:在队尾插入一个元素输出:如果插入成功,队尾增加了一个元素;否则返回失败信息a1

a2

…an入队出队Enqueue操作需要指明插入位置吗?队列的抽象数据类型定义DeQueue

输入:无功能:删除队头元素输出:如果删除成功,返回被删元素值;否则给出失败信息GetQueue

输入:无功能:读取队头元素输出:若队列不空,返回队头元素;否则给出失败信息Empty

输入:无功能:判断队列是否为空输出:如果队列为空,返回1,否则,返回0a1

a2

…an入队出队队列的抽象数据类型定义3-3-2队列的顺序存储结构及实现v第三章栈和队列顺序队列顺序队列:队列的顺序存储结构如何表示队尾:设变量rear存储队尾元素所在的下标如何表示队头:用数组的一端作为队头,从下标0处开始存放如何改造数组实现队列的顺序存储?01234a1a2a3a4rear例:a1a2a3a4依次入队入队操作的时间性能?01234a1a2a3a4rear例:a1a2依次出队顺序队列顺序队列:队列的顺序存储结构出队操作的时间性能?如何表示队尾:设变量rear存储队尾元素所在的下标如何表示队头:用数组的一端作为队头,从下标0处开始存放如何改造数组实现队列的顺序存储?如何改进出队操作的时间性能?01234a2a3a4rear设置队头、队尾两个位置指针约定:队头front指向队头元素的前一个位置,队尾rear指向队尾元素fronta1例:a1a2依次出队入队、出队时间性能均是O(1)顺序队列队列的移动有什么特点?01234a2a3a4front例:a1a2依次出队整个队列向数组下标较大方向移动单向移动性队列的单向移动性会产生什么问题?a5假溢出:数组空间发生上溢,但数组的低端还有空闲空间rear顺序队列如何解决假溢出呢?01234a3a4rearfront如何使数组下标循环呢?a5a6if(rear+1>4)rear=0;elserear++;循环队列:队列采用顺序存储,并且数组是头尾相接的循环结构程序技巧:求模(正余数)使得数组下标循环rear=(rear+1)%5循环队列循环队列的类定义InitQueue:队列的初始化DestroyQueue:队列的销毁EnQueue:入队DeQueue:出队GetQueue:取队头元素Empty:判空队列的抽象数据类型定义?constintQueueSize=100;template<typenameDataType>classCirQueue{public:CirQueue();~CirQueue();voidEnQueue(DataTypex);DataTypeDeQueue();DataTypeGetQueue();intEmpty();private:

DataTypedata[QueueSize];intfront,rear;};CirQueue<DataType>::CirQueue(){front=rear=QueueSize-1;}循环队列的实现——初始化01234rearfrontCirQueue<DataType>::CirQueue(){front=rear=-1;}rearfront循环队列:队列采用顺序存储,并且数组是头尾相接的循环结构设置队头、队尾两个位置指针会出现Bug?01234a3rearfront如何判断循环队列的队空?队空的判定条件:front=rearintCirQueue<DataType>::Empty(){if(rear==front)return1;elsereturn0;}循环队列的实现——判空a6a2a4a5rearfront如何判断循环队列队满?队空的判定条件:front=rear队满的判定条件:front=rearx队空和队满0123401234a6a2a4a5rearfront如何确定不同的队空、队满的判定条件?队空的判定条件:front=rear队满的判定条件:front=rear数组中有一个空闲单元01234a1a2a4a5rearfront(rear+1)%QueueSize=front队空和队满template<typenameDataType>voidCirQueue<DataType>::EnQueue(DataTypex){

if((rear+1)%QueueSize==front)throw"上溢";

rear=(rear+1)%QueueSize;//队尾指针在循环意义下加1data[rear]=x;//在队尾处插入元素}

01234a3a4rearfront时间复杂度是多少?循环队列的实现——入队xPage07template<typenameDataType>DataTypeCirQueue<DataType>::DeQueue(){if(rear==front)throw"下溢";

front=(front+1)%QueueSize;//队头指针在循环意义下加1returndata[front];//读取并返回出队前的队头元素}取队头元素的实现?01234a2a3a4rearfront循环队列的实现——出队3-3-3队列的链式存储结构及实现v第三章栈和队列链队列的存储结构定义链队列:队列的链接存储结构firsta1a2an∧aiP:用链表的哪一端作为队头?哪一端作为队尾?A:链头作为队头,出队时间为O(1)

链尾作为队尾,入队时间为O(n)P:链队列需要加头结点吗?rearfront设置队尾指针rear链队列的类定义InitQueue:队列的初始化DestroyQueue:队列的销毁EnQueue:入队DeQueue:出队GetQueue:取队头元素Empty:判空队列的抽象数据类型定义?template<typenameDataType>classLinkedQueue{public:

LinkedQueue();~LinkedQueue();voidEnQueue(DataTypex);DataTypeDeQueue();DataTypeGetQueue();intEmpty();private:

Node<DataType>*front,*rear;};xs∧front∧rear没有头结点会怎样?xs∧rearfrontrear=s;front=s;链队列的实现——入队voidLinkedQueue<DataType>::EnQueue(DataTypex){

Node<DataType>*s=nullptr;

s=newNode<DataType>;//申请结点s

s->data=x;s->next=nullptr;

rear->next=s;rear=s;}时间复杂度是多少?a1a2an∧airearfrontxs∧考虑边界情况?p∧考虑边界情况?如何判断边界情况?a1a2an∧airearfrontprear∧a1frontp->next=nullptr链队列的实现——出队DataTypeLinkedQueue<DataType>::DeQueue(){DataTypex;Node<DataType>*p=nullptr;

if(rear==front)throw"下溢";p=front->next;x=p->data;

front->next=p->n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论