#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct qnode
{
ElemType data;
struct qnode* next;
}DataNode; //声明数据结点类型
typedef struct
{
DataNode* front;
DataNode* rear;
}LinkQuNode; //声明链队类型
inline void InitQueue(LinkQuNode*& q)
{
q = (LinkQuNode*)malloc(sizeof(LinkQuNode));
q->front = q->rear = NULL;
}
inline void DestoryQueue(LinkQuNode*& q)
{
DataNode* pre = q->front, * p;
if (pre != NULL)
{
p = pre->next;
while (p != NULL)
{
free(pre);
pre = p;
p->next;
}
free(pre);
}
free(q);
}
inline bool QueueEmpty(LinkQuNode* q)
{
return(q->rear == NULL);
}
inline bool enQueue(LinkQuNode*& q, ElemType e)
{
DataNode* p;
p = (DataNode*)malloc(sizeof(DataNode));
p->data = e;
p->next = NULL;
if (q->rear == NULL)
q->front = q->rear = p;
else
{
q->rear->next = p;
q->rear = p;
}
return true;
}
inline bool deQueue(LinkQuNode*& q, ElemType& e)
{
DataNode* 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;
e = t->data;
free(t);
return true;
}
#include"LinkQueue.cpp"
int main()
{
ElemType e;
LinkQuNode* q;
printf("队列q的基本运算:\n");
printf(" (1)初始化队列q\n");
InitQueue(q);
printf(" (2)依次进队列元素a,b,c\n");
enQueue(q, 'a');
enQueue(q, 'b');
enQueue(q, 'c');
printf(" (3)队列为%s\n", (QueueEmpty(q) ? "空" : "非空"));
if (deQueue(q, e) == 0)
printf("队空,不能出队\n");
else
printf(" (4)出队一个元素%c\n", e);
printf(" (5)进队列元素d,e,f\n");
enQueue(q, 'd');
enQueue(q, 'e');
enQueue(q, 'f');
printf(" (6)出队列序列:");
while (!QueueEmpty(q))
{
deQueue(q, e);
printf("%c", e);
}
printf("\n");
printf(" (7)释放队列\n");
DestoryQueue(q);
return 1;
}