#include "stdafx.h"
#include<iostream>
using namespace std;
typedef int QElenType;
typedef struct QNode {
QElenType data;
struct QNode * next;
}QNode,*QNodePtr;
typedef struct {
QNodePtr front;
QNodePtr rear;
}LinkQueue;
typedef enum Status {
success, fail, fatal, rangeerror, overflow
}Status;
Status InitQueue(LinkQueue &q) {
q.front = q.rear = (QNodePtr)malloc(sizeof(QNode));
if (!q.front) exit(OVERFLOW);
q.rear->next = NULL;
return success;
}
Status DestoryQueue(LinkQueue &q) {
while (q.front) {
q.rear = q.front->next;
free(q.front);
q.front = q.rear;
}
return success;
}
Status EnQueue(LinkQueue &q, QElenType elem) {
QNodePtr p = (QNodePtr)malloc(sizeof(QNode));
if (!p) exit(OVERFLOW);
p->data = elem; p->next = NULL;
q.rear->next = p;
q.rear = p;
return success;
}
Status DeQueue(LinkQueue &q, QElenType &elem) {
if (q.front == q.rear) return fail;
QNodePtr p = q.front->next;
elem = p->data;
q.front->next = p->next;
if (q.front == q.rear) q.rear = q.front;
free(p);
return success;
}
void PrintQueue(LinkQueue &q) {
QNodePtr p;
p = q.front->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkQueue q;
int a[] = { 2,4,6,9 };
int len = sizeof(a) / sizeof(a[0]);
InitQueue(q);
for (int i = 0; i < len - 1; i++) {
EnQueue(q, a[i]);
}
PrintQueue(q);
QElenType elem;
DeQueue(q, elem);
PrintQueue(q);
DestoryQueue(q);
system("pause");
return 0;
}