c语言数据结构:用标志位实现循环队列

2018-06-18 03:58:26来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 #define MAXSIZE 10//定义队列长度
  5 
  6 static int flag=0;//定义标志位
  7 
  8 typedef struct {
  9     int *base;
 10     int front;
 11     int rear;
 12 }SqQueue;//创建结构体
 13 
 14 int InitQueue(SqQueue &Q){
 15     Q.base=(int*)malloc(MAXSIZE*sizeof(int));
 16     if(!Q.base)
 17         return 0;
 18     else{
 19         Q.front=Q.rear=0;
 20         return 1;
 21     }
 22 }//创建空链表
 23 
 24 
 25 int IsEmpety(SqQueue &Q){
 26     if(flag==0&&Q.front==Q.rear){
 27         printf("队列为空\n");
 28         return 0;
 29     }
 30     else 
 31         return 1;
 32 
 33 }//判断是否为空
 34 
 35 int IsFull(SqQueue &Q){
 36     if(flag==1&&Q.front==Q.rear){
 37         printf("队列已满\n");
 38         return 0;
 39     }
 40     else
 41         return 1;
 42 }//判断是否已满
 43 
 44 void AddQueue(SqQueue &Q){
 45     if(IsFull(Q)==1){
 46         int e;
 47         printf("请输入元素:\n");
 48         scanf("%d",&e);
 49         Q.base[Q.rear]=e;
 50         Q.rear=(Q.rear+1)%MAXSIZE;
 51         flag=1;
 52     }
 53 }//添加元素
 54 
 55 void DeleteQueue(SqQueue &Q){
 56     if(IsEmpety(Q)==1){
 57         int e;
 58         e=Q.base[Q.front];
 59         Q.front=(Q.front+1)%MAXSIZE;
 60         flag=0;
 61         printf("%d\n",e);
 62     }
 63 }//删减元素
 64 
 65 void Action(SqQueue &Q){
 66     printf("1.入队\n");
 67      printf("2.使队头元素出队,并返回它的值\n");
 68      printf("3.退出\n");
 69      int a;
 70      scanf("%d",&a);
 71       switch(a)
 72       {
 73       case 1:
 74      
 75           AddQueue(Q);
 76           break;
 77       case 2:
 78           
 79           DeleteQueue(Q);
 80           break;
 81       case 3:
 82           exit(0);
 83       default:
 84          printf("输入不合法,请重新输入\n");
 85 
 86       }
 87       Action(Q);
 88 }//操作选项
 89 
 90 int main(){
 91     SqQueue Q;
 92     if(InitQueue(Q))
 93         printf("创建成功。\n");
 94     else{
 95         printf("创建失败。");
 96         system("pause");
 97         return 0;
 98     }
 99     
100     Action(Q);
101     
102     system("pause");
103     free(Q.base);
104     return 0;
105 
106 
107 }//主函数

 

 

 

虽然用标志位实现了,可是将int型数组换为char型数组时会出现错误,在此保留疑问,待解决。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:动态规划(DP)入门之-------最长非降子序列(O(n^2))

下一篇:实现解一元二次方程(循环)