顺序队列的表示与相关操作
1. 结构的定义(动态分配内存)
typedef struct
{
ElemType *elem;
int front;
int rear;
}SqQueue;
2. 队列的初始化
bool InitQueue(SqQueue &Q)
{
Q.elem = (ElemType*) malloc(MAXSIZE * sizeof(ElemType));
if(!Q.elem)
{
free(Q.elem);
return false;
}
Q.front = Q.rear = 0;
return true;
}
3. 判断队列是否为空
bool isEmpty(SqQueue &Q)
{
return (Q.front == Q.rear) ? true : false;
}
4. 判断是否队满
bool isFull(SqQueue &Q)
{
return (Q.front == ((Q.rear + 1) % MAXSIZE)) ? true : false;
}
5. 获取队内元素个数
int QueueLength(SqQueue &Q)
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
6. 向队尾插入元素
bool Push_back(SqQueue &Q, ElemType e)
{
if(isFull(Q)) return false;
Q.elem[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
return true;
}
7. 弹出队头元素
bool Pop_front(SqQueue &Q, ElemType e)
{
if(isEmpty(Q)) return false;
e = Q.elem[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return true;
}
8. 遍历队内元素
void QueueTraverse(SqQueue Q)
{
int l = Q.front, r = Q.rear;
while(l != r)
{
printf("%d\n", Q.elem[l]);
l = (l + 1) % MAXSIZE;
}
}