注意:头结点不是用来存放数据的,而是为了操作方便人工添加的。
#include<stdio.h>
#include<iostream>
using namespace std; //因为该头结点不是用来存放数据的,而是为了
//操作方便人工添加的。
typedef char ElemType;
typedef struct QNode {
ElemType data;
struct QNode* next;
};
typedef struct LinkQueue {
QNode* front;
QNode* reat;
};
void initQueue(LinkQueue*q)
{
q->front = q->reat = (QNode*)malloc(sizeof(QNode));
if (!q->front) cout << "initQueue failed" << endl;
q->front->next = NULL;
}
void EnQueue(LinkQueue*q, ElemType e)
{
QNode*p;
p = (QNode*)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
q->reat->next = p;
q->reat = p;
}
void DeQueue(LinkQueue*q, ElemType*e)
{
QNode*p;
if (q->front == q->reat)return;
p = q->front->next;
*e = p->data;
q->front->next = p->next; //因为该头结点不是用来存放数据的,而是为了
//操作方便人工添加的
//如果写成q->front = p; 只能删除第一个元素。
if (q->reat == p)q->reat = q->front;
free(p);
}
void DestroyQueue(LinkQueue*q)
{
while (q->front)
{
q->reat = q->front->next;
free(q->front);
q->front = q->reat;
}
cout << "destroy" << endl;
}
void main()
{
ElemType e;
LinkQueue q;
initQueue(&q);
cout << "input string" << endl;
cin >> e;
while (e!='#')
{
EnQueue(&q, e);
cin >> e;
}
cout << "the string into the quene" << endl;
while (q.front!=q.reat)
{
DeQueue(&q, &e);
cout << e;
}
cout << endl;
DestroyQueue(&q);
}