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

循环队列的c++类

2015-08-05 13:21 399 查看
//-----------------------

//循环队列的难点在于判断队列的空/满状态

//空:_queue->front==_queue->rear

//满:_queue->front==(_queue->rear+1)%_queue->maxsize (为了区别于空的状态,此时队列还剩一个位置没有存数据)

//---------------------------

#include<iostream>

using namespace std;

typedef struct linknode {

int * data;

int front;

int rear;

int maxsize;

}*pqueue,queue;

class QUEUE{

public:

QUEUE(){

_queue=NULL;

}

~QUEUE(){

if(_queue->data!=NULL){

delete [] _queue->data;

_queue->data=NULL;

}

}

pqueue initQueue(const int size) {

pqueue _queue=new queue;

_queue->maxsize=size;

_queue->data= new int(_queue->maxsize);

_queue->front=0;

_queue->rear=0;

return _queue;

}

int ISEMPTY(pqueue _queue) const;

int ISFULL(pqueue _queue) const;

void print(pqueue _queue) const;

int push(pqueue _queue,int value);

int pop(pqueue _queue);

private:

pqueue _queue;

};

int QUEUE::ISEMPTY(pqueue _queue) const { //空

return (_queue->front==_queue->rear)?1:0;

}

int QUEUE::ISFULL(pqueue _queue) const { //满

return (_queue->front==(_queue->rear+1)%_queue->maxsize)?1:0;

}

void QUEUE::print(pqueue _queue) const { //遍历

int i=_queue->front%_queue->maxsize;

int j=_queue->rear;

while(j>i){

cout<<_queue->data[i]<<" ";

i++;

}

cout<<""<<endl;

}

int QUEUE::push(pqueue _queue,int value) { //入队列

if(ISFULL(_queue)) { //可以继续申请空间,一般申请1倍空间

return 0;

}

_queue->rear=_queue->rear%_queue->maxsize;

_queue->data[_queue->rear++]=value;

return 1;

}

int QUEUE::pop(pqueue _queue) { //出队列

if(ISEMPTY(_queue)) {

return 0;

}

_queue->front=_queue->front%_queue->maxsize;

return _queue->data[_queue->front++];

}

#include"queue.h"

int main(){

QUEUE * queue = new QUEUE;

pqueue _queue=queue->initQueue(5);

queue->push(_queue,1);

queue->push(_queue,2);

queue->push(_queue,3);

queue->push(_queue,4);

//queue->push(_queue,5);

cout<<queue->ISFULL(_queue)<<endl;

cout<<_queue->rear;

queue->print(_queue);

system("pause");

return 1;

}

参考:
http://blog.csdn.net/lpp0900320123/article/details/20694409
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: