//2011年9月5日
//
//队列的基本操作
#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef int QElemType;
typedef int Status;
#define OVERFLOW 0
#define ERROR 0
#define OK 1
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue( LinkQueue &Q ){
//构造一个空队列
Q.front = Q.rear = ( QueuePtr ) malloc( sizeof( QNode ) );
if( !Q.front ) exit( OVERFLOW );
Q.front ->next = NULL;
return OK;
}
Status DestroyQueue( LinkQueue &Q ){
//销毁队列
while( Q.front ) {
Q.front = Q.rear ->next ;
free( Q.front );
Q.front = Q.rear ;
}
return OK;
}
Status EnQueue( LinkQueue &Q, QElemType e ){
//入队
QueuePtr p;
p = ( QueuePtr )malloc( sizeof( QNode ) );
if( !p ) exit( OVERFLOW );
p ->data = e;
Q.rear ->next = p;
Q.rear = p;
Q.rear ->next = NULL;
cout << "入队列"<<endl;
return OK;
}
Status DeQueue( LinkQueue &Q, QElemType e ){
//若队列不空,则删除Q的队头元素,用e返回其值,否则返回ERROR
QueuePtr p;
if( Q.front == Q.rear ) return ERROR;
p = Q.front ->next ;
e = p ->data;
Q.front ->next = p ->next ;
if( Q.rear == p ) Q.rear = Q.front ;
free( p );
return OK;
}
Status QueueTraverse( LinkQueue Q ){
//遍历队列
cout << "QueueuTraverse" <<endl;
QueuePtr p = Q.front ->next ;
while( p != NULL )
{
cout << p ->data << "、";
p = p ->next ;
}
return OK;
}
int main()
{
LinkQueue Queue;
QElemType elem = 0;
InitQueue( Queue );
for( int i = 0; i < 5; i++ ){
EnQueue( Queue, i );
}
QueueTraverse( Queue );
DeQueue( Queue, elem );
QueueTraverse( Queue );
system("pause");
return 0;
}