队列的顺序存储表示---数组实现
#define MaxSize 10 typedef struct Node{ ElementType *Array; int front; int rear; } *Queue; Queue CreateQueue( int MaxSize ) { Queue PtrQ; PtrQ = malloc(sizeof(struct Node )); if(PtrQ == NULL) printf("out of space "); PtrQ->Array = malloc(sizeof( ElementType ) * MaxSize ); if(PtrQ == NULL ) printf("out of space "); PtrQ->front = 0; PtrQ->rear = 0; return PtrQ; } int IsFull( Queue PtrQ ) { return (rear+1) % MaxSize == front; } void AddQ(ElementType X, Queue PtrQ) { if( IsFull( PtrQ ) ) { printf("队列满"); return; } PtrQ->rear = (Q->rear + 1) % MaxSize; PtrQ->Array[PtrQ->rear] = X; } int IsEmpty(Queue PtrQ ) { return PtrQ->rear == PtrQ->front; } ElementType DeleteQ( Queue PtrQ ) { if( IsEmpty( PtrQ ) ) { printf("队列空"); return; } PtrQ->front = (PtrQ->front + 1) % MaxSize; return PtrQ->Array[PtrQ->front]; }
以上为循环数组存储,且没有把size域放在结构里,这种方式,一个结构就是一个队列
判断队列满空,还可以用结构中加size域和tag(记录最后一次是插入还是删除)
MaxSize的数组只用MaxSize-1的空间
rear指向队列的最后一个元素
front指向队列的第一个元素的前面
front = rear 为空
front = (rear+1) % MaxSize 为满