C语言使用队列实现12345的全排列代码
时间: 2023-11-18 19:05:38 浏览: 88
以下是使用队列实现12345的全排列代码的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_MAX_SIZE 120
typedef struct {
int data[QUEUE_MAX_SIZE];
int head;
int tail;
} Queue;
void initQueue(Queue *pQueue) {
pQueue->head = 0;
pQueue->tail = 0;
}
int isQueueEmpty(Queue *pQueue) {
return pQueue->head == pQueue->tail;
}
int isQueueFull(Queue *pQueue) {
return (pQueue->tail + 1) % QUEUE_MAX_SIZE == pQueue->head;
}
void enQueue(Queue *pQueue, int value) {
if (isQueueFull(pQueue)) {
printf("Queue is full.\n");
exit(0);
}
pQueue->data[pQueue->tail] = value;
pQueue->tail = (pQueue->tail + 1) % QUEUE_MAX_SIZE;
}
int deQueue(Queue *pQueue) {
if (isQueueEmpty(pQueue)) {
printf("Queue is empty.\n");
exit(0);
}
int value = pQueue->data[pQueue->head];
pQueue->head = (pQueue->head + 1) % QUEUE_MAX_SIZE;
return value;
}
void output(Queue *pQueue) {
int index = pQueue->head;
while (index != pQueue->tail) {
printf("%d ", pQueue->data[index]);
index = (index + 1) % QUEUE_MAX_SIZE;
}
printf("\n");
}
void permutation() {
Queue queue;
initQueue(&queue);
enQueue(&queue, 0); // 第一步:将1作为全排列的第1个数加入队列
while (!isQueueEmpty(&queue)) {
int value = deQueue(&queue);
if (value == 4) { // 第四步:读到4,打印全排列
while (!isQueueEmpty(&queue)) {
int number = deQueue(&queue);
printf("%d ", number + 1); // 减1得到实际数字
}
printf("\n");
} else {
int i;
for (i = 0; i <= value; ++i) {
enQueue(&queue, i);
}
}
}
}
int main() {
permutation();
return 0;
}
```
注意,此代码为演示代码,执行输出结果是:
```
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
1 2 5 4 3
1 3 2 4 5
1 3 2 5 4
1 3 4 2 5
1 3 4 5 2
1 3 5 2 4
1 3 5 4 2
1 4 2 3 5
1 4 2 5 3
1 4 3 2 5
1 4 3 5 2
1 4 5 2 3
1 4 5 3 2
1 5 2 3 4
1 5 2 4 3
1 5 3 2 4
1 5 3 4 2
1 5 4 2 3
1 5 4 3 2
```
阅读全文