队列算法应用

浩雨2019年10月28日算法56251

image.png

#include<stdio.h>
#define MAXSIZE 100
typedef char DataType;
typedef struct{
    DataType data[MAXSIZE];
    int front; //队头下标 
    int rear; //队尾下标 
}SeqQueue;
 
/*初始化队列*/
void InitQueue(SeqQueue *Q){
    Q->front = Q->rear=0;
}
 
/*判断队空*/
int EmptyQueue(SeqQueue *Q){
    if(Q->front == Q->rear)
       return 1;
    else
       return 0;
}
 
/*入队*/
int InQueue(SeqQueue *Q,DataType x){
    if((Q->rear+1)%MAXSIZE == Q->front){
       printf("队满,不能入队!");
       return 0;
    }
    else{
       Q->rear = (Q->rear+1) % MAXSIZE;
       Q->data[Q->rear] = x;
       return 1;
    }
}
 
/*出队*/
int DeQueue(SeqQueue *Q,DataType *x){
    if(EmptyQueue(Q)){
       printf("队空,不能出队!");
       return 0;
    }
    else{
       Q->front = (Q->front+1)%MAXSIZE; //队头指针增1 
       *x = Q->data[Q->front]; //队头元素赋给指针x的变量
       return 1; 
    }
}
 
/*取队头元素*/
int GetFront(SeqQueue *Q,DataType *x){
    if(EmptyQueue(Q)){
       printf("队空,无队头元素!");
       return 0;
    }
    else{
       *x = Q->data[(Q->front+1) % MAXSIZE];
       return 1;
    }
}
 
/*显示队列元素*/
void ShowQueue(SeqQueue *Q){
    int p=Q->front;
    if(p == Q->rear){
       printf("队列为空,无元素!");
    }
    else{
       printf("从队头起,队列中的元素为:");
       while(p != Q->rear){
           p = (p+1)%MAXSIZE;
           printf("%c",Q->data[p]);
       }
    }
}
 
void Menu()
{
        printf("\n       队列的各种操作");
       printf("\n===================================================");
       printf("\n|      1--初始化队列                              |");
       printf("\n|      2--调用入队函数                            |");
       printf("\n|      3--调用出队函数,输出队列Q中指定的个数     |");
       printf("\n|      4--输出此时的队头元素                      |");
       printf("\n|      5--调用显示函数,输出顺序队列Q             |");
       printf("\n===================================================");   
       printf("\n请输入菜单号(0-5):");
}
main(){
    int i,n,flag;
    SeqQueue Q;
    DataType x;  //char x
    char ch1,ch2,a;
    ch1 = 'y';
    while(ch1 == 'y' || ch1 == 'Y'){
       Menu();
       scanf(" %c",&ch2);
       getchar();
       switch(ch2){
           case '1':
              InitQueue(&Q);
              printf("队的初始化完成!");
              break;
           case '2':
              printf("请输入入队元素的个数:");
              scanf("%d",&n);
              printf("请输入%d个入队的字符",n);
              for(i=0; i<n; i++){
                  scanf(" %c",&x);
                  flag = InQueue(&Q,x);
              }
              if(flag == 1)
                  printf("入队成功!");
              else
                  printf("入队失败!");
              break;
           case '3':
              printf("请输入要出队元素的个数:");
              scanf("%d",&n);
               printf("出队的元素顺序依次为:");
              for(i=0; i<n; i++){
                  flag = DeQueue(&Q,&x);
                  printf("%c",x);
              }
              if(flag == 1)
                  printf("出队成功!");
              else
                  printf("出队失败!");
              break;
           case '4':
              if(flag = GetFront(&Q,&x))
                  printf("当前队头元素为:%c",x);
              break;
           case '5':
              ShowQueue(&Q);
              break;
           case '0':
              ch1 = 'n';
               break;
           default:
              printf("输入有误!请重新输入!");
       }
    }
}



返回列表

上一篇:算法初步

下一篇:C 存储类浅谈

请先 登录 再评论,若不是会员请先 注册