循环队列的实现

来源:互联网 发布:双系统怎样重装ubuntu 编辑:程序博客网 时间:2024/06/07 00:20

主要代码:

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

完整代码连接:

点击打开链接