动态数组实现循环队列
2012-07-20 20:56
489 查看
vs2008运行正确,如有误,请各位大牛指正!
代码:
代码:
// DQueue.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" /*动态数组实现循环队列:少用一个空间,队尾指针的下一位是队头指针时为满 队头、队尾初始值:front = rear = 0; 队头:总是指向第一个结点 队尾:总是指向最后一个结点的下一位 队空:front == rear 队满:(rear+1)%Max==front 或不存在队满,动态增加内存 入队: data[(rear++)%Max]= NewItem; 出队:NewItem = data[(front++)%Max]; */ #include <iostream> using namespace std; const int QueueIncreMent=10; template<class Type> class Queue { public: Queue(int maxSize = 20); ~Queue(); Queue(const Queue<Type>& otherQueue); Queue<Type> operator=(const Queue<Type>& otherQueue); void initQueue(); bool isEmptyQueue() const; bool IsFullQueue() const;; void destoryQueue(); void enQueue(Type newItem); void deQueue(Type& newItem); int lengthQueue(); private: Type* data; int front; int rear; int maxSize;//队列的最大空间 }; template<class Type> Queue<Type>::Queue(int maxSize) { this->maxSize = maxSize; data = new Type[maxSize]; front = 0; rear = 0; } template<class Type> Queue<Type>::~Queue() { if (data != NULL) { destoryQueue(); } } template<class Type> Queue<Type>::Queue(const Queue<Type>& otherQueue) { if (!otherQueue.isEmptyQueue()) { this->maxSize = otherQueue.maxSize; data = new Type[maxSize]; front = otherQueue.front; rear = otherQueue.rear; memcpy(data,otherQueue.data,maxSize); } } template<class Type> Queue<Type> Queue<Type>::operator=(const Queue<Type>& otherQueue) { if (this!=&otherQueue) { if (!otherQueue.isEmptyQueue()) { if (maxSize!=otherQueue.maxSize) { maxSize = otherQueue.maxSize; delete[] data; data = new Type[maxSize]; } front = otherQueue.front; rear = otherQueue.rear; memcpy(data,otherQueue.data,maxSize); } } return *this; } template<class Type> void Queue<Type>::initQueue() { destoryQueue(); } template<class Type> bool Queue<Type>::isEmptyQueue() const { return (rear == front); } template<class Type> bool Queue<Type>::IsFullQueue() const { return ((rear+1)%maxSize == front); } template<class Type> void Queue<Type>::destoryQueue() { delete[] data; data = NULL; //注意此步 front = 0; rear = 0; } template<class Type> void Queue<Type>::enQueue(Type newItem) { if (IsFullQueue()) { maxSize = maxSize+QueueIncreMent; Type *newdata = new Type[maxSize]; memcpy(newdata,data,maxSize); delete data; data = newdata; } else { data[(rear++)%maxSize] = newItem; } } template<class Type> void Queue<Type>::deQueue(Type& newItem) { if (isEmptyQueue()) { cout<<"队列空!"<<endl; } else { newItem = data[(front++)%maxSize]; } } template<class Type> int Queue<Type>::lengthQueue() { return ((rear-front+maxSize)%maxSize); } int _tmain(int argc, _TCHAR* argv[]) { Queue<char> queue1; Queue<char> queue2; char a[4] = {'1','2','3','4'}; for (int i=0; i<4; i++) { queue1.enQueue(a[i]); } queue2 = queue1; Queue<char> queue3(queue2); for (int i=0; i<4; i++) { char b; queue3.deQueue(b); cout<<b<<" "; } cout<<endl; system("pause"); return 0; }
相关文章推荐
- 队列--基于动态循环数组实现(Java)
- 深入理解循环队列----循环数组实现ArrayDeque
- 20162316刘诚昊 用数组实现循环队列
- 队列的顺序实现(循环数组)与链式实现
- 数组实现循环队列
- 使用循环数组高效的实现队列类
- Java数组实现循环队列、Java链表实现队列
- 基础知识--数组、栈、队列的静态、动态和链式实现
- 队列的顺序实现(循环数组)与链式实现
- 数据结构:队列(循环数组实现)
- 数据结构(java语言描述)-- 队列的循环数组实现
- 数据结构之循环数组实现队列
- c语言数组方式实现静态循环队列
- 队列--基于简单循环数组实现(Java)
- 循环队列的数组实现
- 队列的理解(利用数组实现循环队列)
- 循环数组队列的实现
- 基于数组的循环队列(C++模板实现)
- 队列的循环数组实现
- 循环队列的数组实现!!