zoukankan      html  css  js  c++  java
  • 顺序队列的基本操作(进行了修改解决了假溢出问题)

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define MAXSIZE 5
      4 
      5 typedef int ElemType;
      6 //队列结构体 
      7 typedef struct{
      8     ElemType data[MAXSIZE];
      9     int front,rear;//队头与队尾指针 (实际就是两个变量)
     10 }SqQueue; 
     11 //初始化顺序队列
     12 int InitQueue(SqQueue *S){
     13     S->front=S->rear=0;
     14     //指针赋0,就是不指向任何对象,相当于NULL。 
     15 }
     16 //销毁队列
     17 int  DestroyQueue(SqQueue *S){
     18     
     19 }
     20 //判断队列为空
     21 int IsEmpty(SqQueue *S){
     22     if(S->front==S->rear){
     23         return 1;
     24     }
     25     return 0;
     26 } 
     27 //判断队列以满
     28 //int IsFull(SqQueue *S){
     29 //    if(S->rear==MAXSIZE&&S->front==0){
     30 //        return     printf("队满
    ");;
     31 //    }else if(S->rear==MAXSIZE&&S->front!=0){
     32 //       return printf("队满,但队内前端依然有空位
    "); 
     33 //    }
     34 //    return 0; 
     35 //} 
     36 
     37 //进队运算算法
     38 int EnQueue(SqQueue *S){
     39     if(S->rear==MAXSIZE&&S->front==0){
     40         return     printf("队满
    ");;
     41     }else if(S->rear==MAXSIZE&&S->front!=0){
     42        return printf("队满,但队内前端依然有空位
    出现假溢出现象
    "); 
     43     } 
     44     int n;
     45     printf("请输入你想入队的值
    ");
     46     scanf("%d",&n); 
     47     S->data[S->rear]=n; 
     48     S->rear=S->rear+1;
     49 //    S->front=S->front+1;
     50     return printf("进队成功
    ");
     51 }
     52 //输出队列元素
     53 int DisElem(SqQueue *S){
     54     if(IsEmpty(S)){
     55         return printf("队内是空无法输出
    ");
     56     }
     57     int i=S->front;//i=0
     58     printf("队内元素有:
    "); 
     59     for(int n=0;i<S->rear;n++){
     60         printf("%3d",S->data[i]);
     61         i++;
     62     }
     63     printf("
    ");
     64     return printf("输出成功");
     65 }
     66 //获取队首元素
     67 int GetHead(SqQueue *S){
     68     if(IsEmpty(S)){
     69         return printf("队内是空
    ");
     70     }
     71     return printf("队首元素为
    %d",S->data[S->front]); 
     72 }
     73 int GetLength(SqQueue *S){
     74     if(IsEmpty(S)){
     75         return printf("队内为空
    ");
     76     }
     77     return printf("队的长度为%d",S->rear); 
     78     
     79 }
     80 //出队
     81 int DeleteQueue(SqQueue *S){
     82     if(IsEmpty(S)){
     83         return printf("队内是空无法输出
    ");
     84     }
     85       int x;
     86 //    SqQueue *temp=S->front;
     87       x=S->data[S->front];
     88       S->front=S->front+1;
     89       return printf("出队的元素为%d
    ",x);
     90 }
     91 //使前端空位补上解决假溢出问题 
     92 int FrontQueue(SqQueue *S){
     93     if(S->rear==MAXSIZE&&S->front!=0){
     94         int n;
     95         while(S->front!=0){
     96         S->front=S->front-1;
     97         printf("请输入你想入队的数
    ");
     98         scanf("%d",&n);
     99         S->data[S->front]=n;
    100       }
    101       printf("你已经成功填补空位"); 
    102     }
    103     return printf("现在未出现假溢出现象
    ");
    104 } 
    105 int main(){
    106     SqQueue S;
    107     int n;
    108     InitQueue(&S);
    109     while(true){
    110   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
    111   printf("||  1:入队                                  ||
    ");
    112   printf("||  2:查看队伍元素                          ||
    ");
    113   printf("||  3:查看队首元素                          ||
    ");
    114   printf("||  4:查看队列长度                          ||
    ");
    115   printf("||  5:出队                                  ||
    ");
    116   printf("||  6:使前端空位补上解决假溢出问题          ||
    ");
    117   printf("||  (输入-1退出系统)                         ||
    ");
    118   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
    119         
    120         printf("请输入你的操作序号
    ");
    121         scanf("%d",&n);
    122         switch(n){
    123             case 1:
    124                 EnQueue(&S);
    125                 break;
    126             case 2:
    127                 DisElem(&S);
    128                 break;
    129             case 3:
    130                 GetHead(&S);
    131                 break;
    132             case 4:
    133                 GetLength(&S);
    134                 break;
    135             case 5:
    136                 DeleteQueue(&S);
    137                 break;
    138             case 6:
    139                 FrontQueue(&S);
    140                 break;        
    141             case -1:
    142                 return 0;     
    143             
    144         }
    145         
    146     } 
    147 }
  • 相关阅读:
    Silverlight开发历程—(用C#来绘制图形)
    Silverlight之dispatcherTimer 与 线程
    Silverlight开发历程—RenderTransform特效(TranslateTransform,RotateTransform,ScaleTransform,skewTransform)
    百度程序员猝死 是否过劳死引发争论
    10款优秀的HTML5开发工具
    Silverlight开发历程—(绘制报表)
    IT的哥一样是传说!
    Silverlight开发历程—(布局控件Canvas)
    Silverlight开发历程—(利用C#代码制作取色器)
    Silverlight开发历程—(画刷与着色之线性渐变画刷)
  • 原文地址:https://www.cnblogs.com/longlonglonglong/p/10999767.html
Copyright © 2011-2022 走看看