用c语言队列打印杨辉三角,每个数字四个域宽
时间: 2024-10-14 15:06:28 浏览: 47
在C语言中,我们可以使用结构体数组和队列数据结构来实现杨辉三角的打印,其中每个数字占据四个域宽。首先,我们需要创建一个结构体表示一行的数据,并使用队列来存储每一行的元素。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct {
int num[4];
} TriangleRow;
typedef struct {
TriangleRow row;
bool is_empty;
} QueueItem;
struct Queue {
QueueItem* items;
int size;
};
void enqueue(Queue* queue, TriangleRow row) {
if (queue->size == sizeof(queue->items)/sizeof(*queue->items)) {
// 队列已满,需要动态扩容
queue->items = realloc(queue->items, sizeof(QueueItem)*(queue->size * 2));
}
queue->items[queue->size].row = row;
queue->items[queue->size].is_empty = false;
queue->size++;
}
TriangleRow dequeue(Queue* queue) {
if (queue->is_empty) {
return (TriangleRow){};
}
TriangleRow result = queue->items[0];
queue->items[0].is_empty = true;
if (queue->size > 1) {
memmove(queue->items, queue->items + 1, sizeof(QueueItem)*(queue->size - 1));
} else {
free(queue->items);
queue->items = NULL;
}
queue->size--;
return result;
}
void print_yang_hui_triangle(int n) {
Queue queue;
queue.items = malloc(sizeof(QueueItem));
queue.size = 0;
queue.is_empty = true;
for (int i = 0; i <= n; i++) {
TriangleRow current_row;
int* arr = ¤t_row.num[0];
// 初始化当前行
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
arr[j] = 1;
} else {
arr[j] = arr[j - 1] + arr[j];
}
}
// 将行添加到队列并打印
enqueue(&queue, current_row);
while (!queue.is_empty && queue.size > 0) {
printf("%4d", queue.items[queue.size - 1].row.num[0]);
TriangleRow last_row = dequeue(&queue);
if (last_row.is_empty) break;
for (int k = 1; k < 4; k++) {
printf(" %4d", last_row.row.num[k]);
}
printf("\n");
}
}
free(queue.items);
}
int main() {
print_yang_hui_triangle(5);
return 0;
}
```
在这个示例中,我们首先初始化了一个队列来存储每一行的杨辉三角数据。然后,在`print_yang_hui_triangle`函数里,我们递归地生成每一行,并将它们加到队列中。当队列非空时,我们就取出最后一行并打印,同时处理后续行的填充部分。
阅读全文
相关推荐


















