循环队列的顺序表示和实现

队列的顺序存储结构(循环队列)

#define MAX_QSIZE 5//最大队列长度+1struct SqQueue{QElemType *base;int front;//头指针,若队列不空,指向队列头元素int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置};

循环队列的9个基本操作

void InitQueue(SqQueue &Q){Q.base = (QElemType *)malloc(MAX_QSIZE * sizeof(QElemType));if (!Q.base) exit(OVERFLOW);Q.front = Q.rear = 0;}void DestroyQueue(SqQueue &Q){if (Q.base)free(Q.base);Q.base = NULL;Q.front = Q.rear = 0;}void ClearQueue(SqQueue &Q){Q.front = Q.rear = 0;}Status QueueEmpty(SqQueue Q){if (Q.front == Q.rear)return TRUE;elsereturn FALSE;}int QueueLength(SqQueue Q){return (Q.rear – Q.front + MAX_QSIZE) % MAX_QSIZE;}Status GetHead(SqQueue Q, QElemType &e){if (Q.front == Q.rear)//队空return ERROR;e = Q.base[Q.front];//将队头元素的值赋给ereturn OK;}Status EnQueue(SqQueue &Q, QElemType e){if ((Q.rear + 1) % MAX_QSIZE == Q.front)//队列满return ERROR;Q.base[Q.rear] = e;Q.rear = (Q.rear + 1) % MAX_QSIZE;//队尾指针+1后,对MAX_QSIZE取余return OK;}Status DeQueue(SqQueue &Q, QElemType &e){if (Q.front == Q.rear)return ERROR;e = Q.base[Q.front];Q.front = (Q.front + 1) % MAX_QSIZE;//移动队头指针return OK;}void ListTraverse(SqQueue Q, void(*visit)(ElemType&)){int i = Q.front;while (i != Q.rear){visit(Q.base[i]);i = (i + 1) % MAX_QSIZE;}printf(“\n”);}

,爱情不是避难所,想进去避难的话,是会被赶出来的。

循环队列的顺序表示和实现

相关文章:

你感兴趣的文章:

标签云: