循环队列子系统
附C源程序如下:
1 #include<stdio.h> 2 #define MAXLEN 10 3 4 typedef struct 5 { int data[MAXLEN]; // 定义数据的类型 6 int front,rear; // 定义队头、队尾指针 7 }csequeue; 8 9 csequeue q; 10 11 void IniQueue() // 初始化队列 12 { q.front=q.rear=MAXLEN-1; 13 } 14 15 void InQueue() // 入队函数 16 { int x ; 17 printf("\n\t\t 输入一个入队的整数数据:"); 18 scanf("%d",&x); 19 if (q.front==(q.rear+1) % MAXLEN ) 20 { printf("\n\t\t 队满,不能入队! \n"); 21 return; 22 } 23 q.rear=(q.rear+1) % MAXLEN; 24 q.data[q.rear]=x; 25 printf("\n\t\t 入队成功! \n"); 26 } 27 28 void Outsequeue() // 出队函数 29 { if (q.front==q.rear) 30 { printf ("\n\t\t 此队列为空! "); 31 return ;} 32 // 队空不能出队 33 else 34 { q.front=(q.front+1) % MAXLEN; 35 printf("\n\t\t 出队元素为:%d\n",q.data[q.front]); // 输出队头元素 36 return; } 37 } 38 39 40 void ShowQueue() // 显示函数 41 { int k=q.front; 42 if (k==q.rear) 43 { printf("\n\t\t 此队列为空! \n"); 44 return; 45 } 46 printf("\n\t\t 此队列元素为:"); 47 48 do 49 { k=(k+1)%MAXLEN; 50 printf("%4d",q.data[k]); 51 } while (k!=q.rear); 52 53 printf("\n"); 54 } 55 56 int length() 57 { int k; 58 k=(q.rear-q.front+MAXLEN)% MAXLEN; 59 return k; 60 } 61 62 int main() 63 { int i=1; 64 int choice; 65 IniQueue(); 66 while (i) 67 { 68 printf("\n\t\t 循 环 队 列 \n"); 69 printf("\n\t\t***********************************************"); 70 printf("\n\t\t* 1----------循环队列初始化 *"); 71 printf("\n\t\t* 2----------进 队 *"); 72 printf("\n\t\t* 3----------出 队 *"); 73 printf("\n\t\t* 4----------显 示 *"); 74 printf("\n\t\t* 5----------求 队 列 长 度 *"); 75 printf("\n\t\t* 0----------返 回 *"); 76 printf("\n\t\t***********************************************"); 77 printf("\n\n\t\t 请选择菜单号: "); 78 scanf("%d",&choice); 79 switch(choice) 80 { 81 case 1: 82 IniQueue(); 83 break; 84 case 2: 85 InQueue(); 86 break; 87 case 3: 88 Outsequeue(); 89 break; 90 case 4: 91 ShowQueue(); 92 break; 93 case 5: 94 printf("\n\t\t 队列长度为: %d \n",length()); 95 break; 96 case 0: 97 i=0; 98 break; 99 } 100 } 101 }