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

  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("队列为空
");
 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("队列已满
");
 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("请输入元素:
");
 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
",e);
 62     }
 63 }//删减元素
 64 
 65 void Action(SqQueue &Q){
 66     printf("1.入队
");
 67      printf("2.使队头元素出队,并返回它的值
");
 68      printf("3.退出
");
 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("输入不合法,请重新输入
");
 85 
 86       }
 87       Action(Q);
 88 }//操作选项
 89 
 90 int main(){
 91     SqQueue Q;
 92     if(InitQueue(Q))
 93         printf("创建成功。
");
 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型数组时会出现错误,在此保留疑问,待解决。

原文地址:https://www.cnblogs.com/Unlimited-Rain/p/7634736.html