循环队列的实现

主要代码:

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");
}

完整代码连接:

点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值