用C语言创建两个循环队列,一个循环队列用于存放十天干,一个循环队列用于存放十二地支,若天干队列为空,则让十天干入队列;若地支队列为空,则让十二地支依次入队列;若两个队都不为空时,两个队列各取一个元素出队列,并在屏幕上输出配对的天干地支;直到输出六十个甲子,程序结束。
时间: 2023-05-30 13:02:04 浏览: 120
```c
#include <stdio.h>
#define MAXSIZE 10 //队列长度
typedef struct {
char data[MAXSIZE]; //队列数组
int front, rear; //队头和队尾指针
} SqQueue;
//初始化队列
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
//判断队列是否为空
int QueueEmpty(SqQueue Q) {
return Q.front == Q.rear;
}
//入队列
int EnQueue(SqQueue *Q, char x) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
return 0; //队列已满
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
//出队列
int DeQueue(SqQueue *Q, char *x) {
if (Q->front == Q->rear) {
return 0; //队列已空
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
int main() {
SqQueue Q1, Q2;
char TG[10] = {'甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'}; //十天干
char DZ[12] = {'子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'}; //十二地支
int i = 0, j = 0;
InitQueue(&Q1);
InitQueue(&Q2);
while (i < 60) { //输出六十个甲子
if (QueueEmpty(Q1)) { //天干队列为空
EnQueue(&Q1, TG[j]); //让十天干入队列
j = (j + 1) % 10;
}
if (QueueEmpty(Q2)) { //地支队列为空
for (int k = 0; k < 12; k++) {
EnQueue(&Q2, DZ[k]); //让十二地支依次入队列
}
}
char tg, dz;
DeQueue(&Q1, &tg);
DeQueue(&Q2, &dz);
printf("%c%c ", tg, dz); //输出配对的天干地支
i++;
}
return 0;
}
```
阅读全文