当前位置:首页 > 算法 > 正文内容

队列算法应用

浩雨5年前 (2019-10-28)算法9821

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("输入有误!请重新输入!");
       }
    }
}



扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/33.html

分享给朋友:

“队列算法应用” 的相关文章

(LeetCode刷题)1. 两数之和

(LeetCode刷题)1. 两数之和

题目解答一:/**  * Note: The returned array must be malloced, assume caller calls free(). &nbs...

(LeetCode刷题)2. 两数相加

(LeetCode刷题)2. 两数相加

题目解答一:简单实现思路:先遍历完两个链表,把各自的数字存入两个数组,然后对应位置的数相加,若结果大于10就进位到更高位的数。/**  * Definition for singly-linked list->  * s...

(LeetCode刷题)3. 无重复字符的最长子串

(LeetCode刷题)3. 无重复字符的最长子串

题目:解法一:class Solution(object):     def lengthOfLongestSubstring(self,s):        &nb...