您好,欢迎访问三七文档
4-9假设以数组Q[m]存放循环队列中的元素,同时以rear和length分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件,并写出相应的插入(enqueue)和删除(dlqueue)元素的操作。【解答】循环队列类定义#includeassert.htemplateclassTypeclassQueue{//循环队列的类定义public:Queue(int=10);~Queue(){delete[]elements;}voidEnQueue(Type&item);TypeDeQueue();TypeGetFront();voidMakeEmpty(){length=0;}//置空队列intIsEmpty()const{returnlength==0;}//判队列空否intIsFull()const{returnlength==maxSize;}//判队列满否private:intrear,length;//队尾指针和队列长度Type*elements;//存放队列元素的数组intmaxSize;//队列最大可容纳元素个数}构造函数templateclassTypeQueueType::Queue(intsz):rear(maxSize-1),length(0),maxSize(sz){//建立一个最大具有maxSize个元素的空队列。elements=newType[maxSize];//创建队列空间assert(elements!=0);//断言:动态存储分配成功与否}插入函数templateclassTypevoidQueueType::EnQueue(Type&item){assert(!IsFull());//判队列是否不满,满则出错处理length++;//长度加1rear=(rear+1)%maxSize;//队尾位置进1elements[rear]=item;//进队列}删除函数templateclassTypeTypeQueueType::DeQueue(){assert(!IsEmpty());//判断队列是否不空,空则出错处理length--;//队列长度减1returnelements[(rear-length+maxSize)%maxSize];//返回原队头元素值}读取队头元素值函数templateclassTypeTypeQueueType::GetFront(){assert(!IsEmpty());returnelements[(rear-length+1+maxSize)%maxSize];//返回队头元素值}
本文标题:作业3.22
链接地址:https://www.777doc.com/doc-4744940 .html