顺序存储循环队列

#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-----------循环队列方法----------

 

posted on 2014-09-02 20:47  流.云  阅读(181)  评论(0)    收藏  举报

导航