基于动态数组的队列实现
来源:互联网 发布:怎么恢复网络默认设置 编辑:程序博客网 时间:2024/06/06 04:35
//--------------DQueue.h------------------#include<iostream>#ifndef DQUEUE#define DQUEUEtypedef int QueueElement;class Queue{public:Queue(int numElements=128);Queue(const Queue & original);~Queue(); const Queue & operator=(const Queue & rightHandSide);bool empty() const;void enqueue(const QueueElement & value);void display(ostream & out) const;QueueElement front() const;void dequeue();private:int myFront, myBack;int myCapacity;QueueElement *myArray;};#endif
//-------------DQueue.cpp-------------------#include<iostream>#include<cassert>#include<new>using namespace std;#include"DQueue.h"Queue::Queue(int numElements){assert(numElements>0);myCapacity=numElements;myArray=new (nothrow) QueueElement[myCapacity];if(myArray!=0){myFront=0;myBack=0;}else{cerr<<"Inadequate memory to allocate stack \n";exit(1);}}Queue::Queue(const Queue & original):myCapacity(original.myCapacity), myFront(original.myFront),myBack(original.myBack){myArray=new (nothrow) QueueElement[myCapacity];if(myArray!=0)for(int pos=myFront;pos!=myBack;pos=(pos+1)%myCapacity)myArray[pos]=original.myArray[pos];else{cerr<<"***Inadequate memory to allocate stack ***\n";exit(1);}}Queue::~Queue(){delete [] myArray;}const Queue & Queue::operator=(const Queue & rightHandSide){if(this!=&rightHandSide){if(myCapacity!=rightHandSide.myCapacity){delete [] myArray;myCapacity=rightHandSide.myCapacity;myArray=new (nothrow) QueueElement[myCapacity];if(myArray==0){cerr<<"";exit(1);}}myFront=rightHandSide.myFront;myBack=rightHandSide.myBack;for(int pos=myFront;pos!=myBack;pos=(pos+1)%myCapacity) myArray[pos]=rightHandSide.myArray[pos];}return *this;}bool Queue::empty() const{return (myFront==myBack);}void Queue::enqueue(const QueueElement & value){int newBack=(myBack+1)%myCapacity;if(newBack!=myFront){myArray[newBack]=value;myBack=newBack;}else{cerr<<"***The queue is full---can't add new value***\n";exit(1);}}void Queue::display(ostream & out) const{for(int i=myFront;i!=myBack;i=(i+1)%myCapacity)out<<myArray[i]<<" ";cout<<endl;}QueueElement Queue::front() const{if(!empty()) return (myArray[myFront]);else{cerr<<"***The queue is empty--returning a garbage value***\n";QueueElement garbage;return garbage;}}void Queue::dequeue(){if(!empty()){myFront=(myFront+1)%myCapacity;}else{cerr<<"***The queue is empty,can't remove a value.***\n";}}
//-----------DQueue_main.cpp--------------#include<iostream>using namespace std;#include"DQueue.h"int main(){cout<<"Enter the queue's capacity: "; int cap; cin>>cap;Queue q(cap);/*//// */return 0;}
阅读全文
0 0
- 基于动态数组的队列实现
- 基于数组的队列实现
- 基于数组的队列实现
- 动态数组实现的队列
- 队列的动态数组实现
- 动态数组实现队列
- 基于数组的队列实现(C语言)
- java 基于数组实现的队列
- 简单队列的实现(基于数组)
- 数据结构队列之环形队列的动态数组实现:queue
- 基于动态数组的列表实现
- 动态数组实现循环队列
- 动态数组实现循环队列
- 基于数组和节点方式的队列的实现
- 笔记七:基于数组的循环队列的实现
- 基于数组和链表的队列实现
- 基于数组的循环队列(C++模板实现)
- 数据结构之——基于数组实现的循环队列
- 读取文本或者Excel的方法
- [NOIP2016] 换教室
- 异常处理
- 嵌入式学习之路
- A. Trip For Meal
- 基于动态数组的队列实现
- kd_tree搜索最近邻点
- VM安装Linux(CentOS6.5)及JDK+Tomcat+ MySQL-5.7
- 机器学习基石-03-2-learning with different Data Labels
- 《DOS命令一日通》连载说明
- 求第n个素数
- Oracle ORA-01157: 无法标识/锁定数据文件 解决方法
- 300. Longest Increasing Subsequence
- Android 开发大牛博客