主要代码:
Status InitQueue(SqQueue &Q)
{
/* TODO (#2#): 构造空队列 */
Q.base=(ElemType *)malloc(MAXQSIZE*sizeof(ElemType));
if(!Q.base)
return ERROR; //TODO: 替换这行代码,以下同
Q.front=Q.rear=0;
return OK;
//....................................
}
//销毁队列Q
// 前提:队列Q已存在
Status DestroyQueue(SqQueue &Q)
{
/* TODO (#3#): 销毁队列 */
return ERROR;
//....................................
}
//将队列Q清为空队列
// 前提:队列Q已存在
Status ClearQueue(SqQueue &Q)
{
/* TODO (#4#): 清空队列*/
if(!Q.base)
return ERROR;
Q.front=Q.rear;
return OK;
//....................................
}
//若队列Q为空,则返回TRUE,否则FALSE
// 前提:队列Q已存在
Status QueueEmpty(SqQueue Q)
{
/* TODO (#5#): 判断队列是否为空 */
if(Q.front==Q.rear)
return TRUE;
return FALSE;
//....................................
}
//返回队列Q的元素个数,即队列长度
// 前提:队列Q已存在
int QueueLength(SqQueue Q)
{
/* TODO (#6#): 返回队列长度 */
int i;
i=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
return i;
//....................................
}
//取队列Q头元素用e返回
// 前提:队列Q存在且非空
Status GetHead(SqQueue Q, ElemType &e)
{
/* TODO (#7#): 取队头元素存入e */
if(Q.front==Q.rear)
return ERROR;//返回操作状态(成功:OK,失败:ERROR)
e=Q.base[Q.front];
return OK;
//....................................
}
//插入元素e作为队列Q的新的队尾元素
// 前提:队列Q存在且未满
Status EnQueue(SqQueue &Q, ElemType e)
{
/* TODO (#8#): 元素e入队列 */
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;//返回操作状态(成功:OK,失败:ERROR)
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
//....................................
}
//删除队列Q的队头元素,并用e返回
// 前提:队列Q存在且非空
Status DeQueue(SqQueue &Q, ElemType &e)
{
/* TODO (#9#): 出队列存入e */
if(Q.front==Q.rear)
return ERROR;//返回操作状态(成功:OK,失败:ERROR)
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
//....................................
}
//
//TODO: 定义好 SqQueue 类型后使用 QueueView 函数
#include <stdio.h>
//查看队列状态(调试用)
void QueueView(SqQueue Q)
{
//extern void PrintElem(ElemType e);//打印数据用
int i=0;
if(Q.front<0||Q.front>=MAXQSIZE||Q.rear<0||Q.rear>=MAXQSIZE){
printf("队列未初始化\n");
return ;
}
printf("---Queue View---\n");
printf("front=%d , rear=%d\n", Q.front, Q.rear);
if(Q.rear>=Q.front) {
printf("..... ......\n");
for(i=Q.front; i<Q.rear; i++) {
printf("%5d\t", i);
printf("%d",Q.base[i]);
printf("\n");
}
if(i<MAXQSIZE) printf("..... ......\n");
} else {
for(i=0; i<Q.rear; i++) {
printf("%5d\t", i);
printf("%d",Q.base[i]);
printf("\n");
}
printf("..... ......\n");
for(i=Q.front; i<MAXQSIZE; i++) {
printf("%5d\t", i);
printf("%d",Q.base[i]);
printf("\n");
}
}
printf("--- view end ---\n");
}
完整代码连接: