顺序存储循环队列

#include<stdio.h>

#include<stdlib.h>

#include<string.h>



//Start-----------循环队列定义----------

#define SIZE 10

#define DataType int



typedef struct{

    DataType data[SIZE];

    int front,rear;

}CirQueue;

void InitQueue(CirQueue *);//置空队列

int QueueEmpty(CirQueue *);//判空

int QueueFull(CirQueue *);//判满

void EnQueue(CirQueue *,DataType);//入队

DataType DeQueue(CirQueue *);//出队

DataType GetFront(CirQueue *);//得到队首元素

//End-----------循环队列定义----------



//Start-----------控制定义----------

int MenuSelect(); //菜单

void DisplayQueue(CirQueue *);//显示队列内容





//End-----------控制定义----------

void main(){

    CirQueue Q;

    char str[10];

    int menu;

    printf("\t\t\t循环队列操作\n\n");

    InitQueue(&Q);



    while(1){

        menu=MenuSelect();

        switch(menu){

            case 1:

                printf("请输入队列:(exit结束)");

                while(!QueueFull(&Q)){

                    scanf("%s",&str);

                    if(strcmp(str,"exit")==0){

                        break;

                    }

                    EnQueue(&Q,atoi(str));

                }

               

               break;

            

            case 2:

                    printf("出队操作的结果为:%d\n",DeQueue(&Q));

                    break;

                   

            case 3:

                    DisplayQueue(&Q);

                    break;

            case 4:{

                    printf("队首元素为:%d\n",GetFront(&Q));

                    break;

                   }

            case 5:{

                printf("队列已满:%s\n",QueueFull(&Q)?"":"不是");

                break;

                   }

            case 6:{

                printf("队列为空:%s\n",QueueEmpty(&Q)?"":"不是");

                break;

                   }

                   

            case 7:

                    exit(0);

                   

        

        }

    

    

    }

    

}

//function













//Start-----------控制定义----------

int MenuSelect(){

    int menu;

    printf("1.数据入队\t\t2.数据出队\t\t3.查看队列\n4.队首元素\t\t5.判断队满\t\t6.判断队空\n7.退出\n");

    printf("请输入:");

    while(1){        

        scanf("%d",&menu);

        if(menu<1 || menu >7){

            printf("输入有误!请重新输入:");

        }else{

            break;

        }



    }

    return menu;



}

void DisplayQueue(CirQueue * Q){

    int i;

    printf("队头->");

    

    for(i=Q->front;i!=Q->rear;i=(i+1)%SIZE){

    

        printf("%d ",Q->data[i]);

        

    }

    printf("<-队尾\n");



}



//End-----------控制定义----------









//Start-----------循环队列方法----------

void InitQueue(CirQueue * Q){

    Q->front=Q->rear=0;

}

int QueueEmpty(CirQueue * Q){

    return Q->front==Q->rear;

}

int QueueFull(CirQueue * Q){

    return (Q->rear+1)%SIZE==Q->front;

}

void EnQueue(CirQueue * Q,DataType d){

    if(QueueFull(Q)){

        printf("Queue is full");

        return;

    }

    

    Q->data[Q->rear]=d;

    Q->rear=(Q->rear+1)%SIZE;

    

}

DataType DeQueue(CirQueue * Q){

    DataType d;

    if(QueueEmpty(Q)){

        printf("Queue is Empty");

        exit(0);

    }

    

    d=Q->data[Q->front];

    Q->front=(Q->front+1)%SIZE;

    return d;

}

DataType GetFront(CirQueue * Q){

    if(QueueEmpty(Q)){

        printf("Queue is Empty");

        exit(0);

    }

    return Q->data[Q->front];

}

//End-----------循环队列方法----------

 

你可能感兴趣的:(队列)