数组实现
#include <stdio.h>
#include <stdlib.h>
typedef int Position;
typedef int ElementType;
struct QNode{
ElementType* Data;
Position Head, Tail;
int MaxSize;
} ;
typedef struct QNode* Queue;
Queue CreateQueue ( int MaxSize) {
Queue q = ( Queue) malloc ( sizeof ( struct QNode) ) ;
q-> Data = ( ElementType * ) malloc ( MaxSize* sizeof ( ElementType) ) ;
q-> Head = 0 ; q-> Tail = 0 ;
q-> MaxSize = MaxSize;
return q;
}
int IsFullQ ( Queue q) {
return ( ( q-> Tail+ 1 ) % q-> MaxSize == q-> Head ) ;
}
int AddQ ( Queue q, ElementType item) {
if ( IsFullQ ( q) ) {
return 0 ;
}
q-> Data[ q-> Tail++ ] = item;
q-> Tail= q-> Tail% q-> MaxSize;
return 1 ;
}
int IsEmpty ( Queue q) {
return ( q-> Tail == q-> Head ) ;
}
ElementType DeleteQ ( Queue q) {
ElementType e = q-> Data[ q-> Head] ;
q-> Head++ ;
q-> Head= ( q-> Head) % q-> MaxSize;
return e;
}
链表的实现
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node1* ONode;
typedef struct QNode* Queue;
struct Node1{
ElementType Data;
ONode Link;
} ;
struct QNode{
ONode Head, Tail;
} ;
Queue CreateQueue ( int MaxSize) {
Queue q = ( Queue) malloc ( sizeof ( struct QNode) ) ;
q-> Head = NULL ;
q-> Tail = NULL ;
return q;
}
int IsFullQ ( Queue q) {
return 0 ;
}
int IsEmpty ( Queue q) {
return ( q-> Head == NULL ) ;
}
int AddQ ( Queue q, ElementType item) {
ONode oq = ( ONode) malloc ( sizeof ( struct Node1) ) ;
oq -> Data = item;
if ( IsEmpty ( q) ) {
oq -> Link = NULL ;
q-> Head = oq;
q-> Tail = oq;
} else {
q-> Tail -> Link = oq;
q-> Tail = oq;
}
return 1 ;
}
ElementType DeleteQ ( Queue q) {
ONode removeNode= q-> Head;
if ( q-> Head == q-> Tail) {
q-> Head = NULL ;
q-> Tail = NULL ;
} else {
q-> Head = q-> Head-> Link;
}
ElementType e = removeNode-> Data;
free ( removeNode) ;
return e;
}
int main ( ) {
return 0 ;
}