您的位置:首页 > 编程语言 > C语言/C++

C++中 循环队列的简单封装

2014-08-20 19:13 246 查看
/*******************
*      queue	   *
* *****************/
#include <iostream>

using namespace std;
/*******************定义结构********************************************/
class Queue
{
public:
Queue(int capacity = 3);
virtual ~Queue();
bool en_queue(int v);//返回是否入队列成功
bool de_queue(int *p = NULL);//返回出队是否成功,成功则返回p[变相返回]
bool empty();//布尔型判断是否空队列
bool full();
int size();//当前队列大小
private:
int * pdata;
int capacity;
int first;
int last;
};

/*******************构造函数********************************************/
Queue::Queue(int capacity)
{
this->capacity = capacity;
pdata = new int[capacity];
first = 0;
last = 0;
}

/*******************析构函数********************************************/
Queue::~Queue()
{
if(NULL!=pdata)
{
delete [] pdata;
}
pdata = NULL;
}

/*******************入队函数********************************************/
bool Queue::en_queue(int v)
{
if(full())
{
cout<<"queue is full\n";
return false;
}
pdata[last++] = v;
//    last%= capacity;//循环赋值
cout<<"en_queue "<<pdata[last-1]<<endl;
}

/*******************出队函数********************************************/
bool Queue::de_queue(int * p)
{
if(empty())
{
cerr<<"queue is empty."<<endl;
return false;
}
if(p!=NULL)
{
*p = pdata[last-1];//将出队的数值保存,变相返回
}
cout<<"de_queue "<<pdata[last-1]<<endl;
last--;
return true;
}

/*******************判空函数********************************************/
bool Queue::empty()
{
if(first==last)
{
return true;
}
return false;
}

/*******************判满函数********************************************/
bool Queue::full()
{
if((last+1)%capacity==first)
{
return true;
}
return false;
}

/*******************测试函数********************************************/
int main(int argc,char **argv)
{
Queue s;
int i = 0;
s.en_queue(1);
s.de_queue();
s.en_queue(2);
s.en_queue(3);
s.en_queue(4);
s.en_queue(5);
s.en_queue(6);
s.en_queue(7);

cout<<endl<<endl;
for(;i<7;i++)
{
s.de_queue();
}

return 0;
}


本文出自 “咙叮咚员外” 博客,请务必保留此出处http://lddyw.blog.51cto.com/4151746/1542695
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: