1つのプログラムを編纂して、チェーンチームの各種の基本演算を実現します

2090 ワード

次の機能を実行します.
(1)チェーンキューqを初期化する.
(2)チェーンチームqが空でないか否かを判断する.
(3)順次キュー要素a,b,c;
(4)1つの要素をデキューし、その要素を出力する.
(5)出力チェーンキューqの要素個数;
(6)順次チェーンキュー要素d,e,f;
(7)出力チェーンキューqの要素個数;
(8)デキューシーケンスを出力する.
(9)チェーンチームを解放する.
コード:
#include"iostream"
using namespace std;
class queue{
private:
queue* next;
char data;
    queue * front;
queue * rear;
static int count;
public:
void initqueue(queue *&q)
{
q=new queue;
q->front=q->rear=NULL;
}
void destroyqueue(queue *&);
    bool queueempty(queue *);
static void enqueue(queue *&,char);
static bool dequeue(queue *&);
static bool outqueue(queue *);
static int getcount(){ return count; }
};




int queue::count=0;




void queue::destroyqueue(queue *&q)
{
queue* p=q->front,*r;
if(p!=NULL)
{
r=p->next;
while(r!=NULL)
{
free(p);
p=r;
r=p->next;
}
}
free(p);
}


bool queue::queueempty(queue *q)
{
return(q->rear==NULL);
}


void queue::enqueue(queue *&q,char e)
{
queue *p;
p=new queue;
p->data=e;
p->next=NULL;
if(q->rear==NULL)
{
q->front=q->rear=p;
}
else
{
q->rear->next=p;
q->rear=p;
}
count++;
}




bool queue::dequeue(queue *&q)
{
queue *t;
if(q->rear==NULL)
return false;
t=q->front;
if(q->front==q->rear)
q->front=q->rear=NULL;
else
q->front=q->front->next;
cout << t->data << endl;
count--;
free(t);
return true;
}


bool queue::outqueue(queue *q)
{
queue *t;
t=q->front;
if(q->rear==NULL)
return false;
else
{
while(t->next!=NULL)
{
cout << t->data << "  ";
t=t->next;
}
}
cout << endl;
return true;
}


void main()
{
queue *q;
q->initqueue(q);
cout << q->queueempty(q) << endl;
q->enqueue(q,'a');
q->enqueue(q,'b');
q->enqueue(q,'c');
q->dequeue(q);
cout << q->getcount() << endl;
q->enqueue(q,'d');
q->enqueue(q,'e');
q->enqueue(q,'f');
cout << q->getcount() << endl;
q->outqueue(q);
q->destroyqueue(q);


}