循环队列的基本操作

来源:互联网 发布:算法有哪些 编辑:程序博客网 时间:2024/05/17 03:20

VC6.0下写的:

#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef char datatype;typedef struct{    datatype *base;     //存储空间的基地址    int front;      //记录队头的下标    int rear;       //记录队尾下一个位置的下标}Queue;int judge = 0;      //判断队是否存在(0为不存在,1为存在)Queue initQueue()   //构造空队{    Queue Q;    Q.base = (datatype *)malloc(sizeof(datatype) * MAXSIZE);    if (judge == 1)    {        printf("队列已存在!\n");        free(Q.base);        return Q;    }    if (!Q.base)    {        printf("构造空队失败!\n");        return Q;    }    judge = 1;    Q.front = 0;    Q.rear = 0;    printf("构造空队成功\n");    return Q;}Queue push_Queue(Queue Q)    //入队{    datatype data;    if (judge == 0)    {        printf("队列不存在!\n");        return Q;    }    if ((Q.rear + 1) % MAXSIZE == Q.front)    {        printf("队已满,无法入队!\n");        return Q;    }    printf("请输入要入队的元素:\n");    scanf("%c", &data);    getchar();    Q.base[Q.rear] = data;    Q.rear = (Q.rear + 1) % MAXSIZE;    printf("元素%c已入队!\n", data);    return Q;}Queue pop_Queue(Queue Q)     //出队{    datatype data;    if (judge == 0)    {        printf("队列不存在!\n");        return Q;    }    if (Q.rear == Q.front)    {        printf("队列已空,无法出队!\n");        return Q;    }    data = Q.base[Q.front];    Q.front = (Q.front + 1) % MAXSIZE;    printf("元素%c已出队\n", data);    return Q;}void show_Queue(Queue Q)    //显示队(顺序为从队头到队尾){    int i;    if (judge == 0)    {        printf("队列不存在!\n");        return;    }    if (Q.rear == Q.front)    {        printf("队为空\n");        return ;    }    i = Q.front;    printf("队遍历为:\n");    while (i != Q.rear)    {        printf("%c ", Q.base[i]);        i++;    }}void length_Queue(Queue Q){    int i, n = 0;    if (judge == 0)    {        printf("队列不存在!\n");        return;    }    i = Q.front;    while (i != Q.rear)    {        i++;        n++;    }    printf("队列的长度为%d\n", n);}void destroy_Queue(Queue Q){    if (judge == 0)    {        printf("队列不存在!\n");        return;    }    free(Q.base);    judge = 0;    printf("队列已销毁!\n");}void caidan()   //输出菜单{    printf("               循环队列子系统\n");    printf("**************************************************\n");    printf("*          1-----构造空队                        *\n");    printf("*          2-----入队                            *\n");    printf("*          3-----出队                            *\n");    printf("*          4-----显示队                          *\n");    printf("*          5-----求队列长度                      *\n");    printf("*          6-----销毁队                          *\n");    printf("*          0-----结束                            *\n");    printf("**************************************************\n");}int main(){    caidan();    while(1)    {        int ch;        Queue Q;        printf("\n***************************************************\n");        printf("请输入你要进行的操作对应的数字:");        scanf("%d",&ch);        getchar();        switch(ch)        {            case 1:     //构造空队            {                Q = initQueue();                break;            }            case 2:     //入队            {                Q = push_Queue(Q);                break;            }            case 3:     //出队            {                Q = pop_Queue(Q);                break;            }            case 4:     //显示队            {                show_Queue(Q);                break;            }            case 5:     //求队列长度            {                length_Queue(Q);                break;            }            case 6:     //销毁队            {                destroy_Queue(Q);                break;            }            case 0:                return 0;        }    }    return 0;}