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型数组时会出现错误,在此保留疑问,待解决。