算法导论系列文章之简单数组队列

来源:互联网 发布:水浒传主旨在哪里知乎 编辑:程序博客网 时间:2024/05/19 03:23

同栈一样,队列也是一种应用十分广泛的数据结构,本次的队列是基于数组实现的,有自动扩充功能.

代码非常简单易懂,同样没什么好说的,看代码.

代码在VS2012下编译通过.大笑


Queue.h

//Queue.h//2013.12.29const int defSize=20;const int expSize=10;typedef int ele;class Queue{public:Queue(int size=defSize);~Queue();bool IsEmpty();void EnQueue(ele &data);bool DeQueue(ele &data);private:ele *m_queue;int m_size;int m_head;int m_tail;void ExpQueue(int size=expSize);bool IsFull();};


Queue.cpp

//Queue.cpp//2013.12.29#include "Queue.h"Queue::Queue(int size){m_queue= new ele[size];m_size=size;m_head=0;m_tail=0;}Queue::~Queue(){delete []m_queue;}bool Queue::IsEmpty(){if(m_head==m_tail)return true;return false;}bool Queue::IsFull(){if((m_head-m_tail+m_size)%m_size==1)return true;return false;}void Queue::EnQueue(ele &data){if(IsFull())ExpQueue();m_queue[m_tail]=data;m_tail=(++m_tail)%m_size;}bool Queue::DeQueue(ele &data){if(IsEmpty())return false;data=m_queue[m_head];m_head=(++m_head)%m_size;return true;}void Queue::ExpQueue(int size){ele *expQueue= new ele[m_size+size];auto pos=0;auto length=(m_tail-m_head+m_size)%m_size;while(m_head!=m_tail){expQueue[pos++]=m_queue[m_head];m_head=(++m_head)%m_size;}delete []m_queue;m_queue=expQueue;m_head=0;m_tail=length;m_size+=size;}


Main.cpp

//队列,基于数组的简单实现#include <iostream>#include "Queue.h"using namespace std;int main (){Queue que(5);ele data;for(auto i=0;i<10;i++)que.EnQueue(i);for(auto i=0;i<5;i++)if(que.DeQueue(data))cout<<data<<" ";elsecout<<"Queue Empty!"<<endl;for(auto i=0;i<10;i++)que.EnQueue(i);for(auto i=0;i<21;i++)if(que.DeQueue(data))cout<<data<<" ";elsecout<<"Queue Empty!"<<endl;system("pause");return 0;}



0 0
原创粉丝点击