试编写C程序,利用队列结构解决以下应用问题试利用链队列结构或循环队列结构完成打印输出杨辉三角形的前7行。(杨辉三角形每行可以左对齐)
时间: 2024-10-12 09:05:01 浏览: 71
要使用C程序实现杨辉三角形的打印,我们可以选择使用循环队列结构。循环队列可以避免数组越界的问题,非常适合这种需要频繁插入和删除元素的应用场景。以下是使用循环队列实现打印前7行杨辉三角形的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} QueueNode;
typedef struct {
QueueNode* front;
QueueNode* rear;
int size;
} Queue;
// 队列初始化
Queue* create_queue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = q->rear = NULL;
q->size = 0;
return q;
}
// 插入元素到队尾
void enqueue(Queue* q, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = q->rear;
q->rear = newNode;
if (q->front == NULL) {
q->front = newNode;
}
q->size++;
if (q->size > q->size * 2) {
printf("Queue overflow.\n");
exit(EXIT_FAILURE);
}
}
// 取出并删除队首元素
int dequeue(Queue* q) {
if (q->front == NULL) {
printf("Queue underflow.\n");
exit(EXIT_FAILURE);
}
int value = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
free(temp);
if (q->front == NULL) {
q->rear = NULL;
}
q->size--;
return value;
}
// 打印杨辉三角形
void print_pascal_triangle(int n, Queue* queue) {
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i)
enqueue(queue, 1);
else
enqueue(queue, dequeue(queue) + dequeue(queue));
}
while (!is_empty(queue)) {
printf("%d ", dequeue(queue));
}
printf("\n");
}
}
int main() {
Queue* queue = create_queue();
print_pascal_triangle(7, queue);
destroy_queue(queue); // 自定义的销毁队列函数
return 0;
}
// 自定义的销毁队列函数
void destroy_queue(Queue* q) {
QueueNode* current = q->front;
while (current != NULL) {
QueueNode* next = current->next;
free(current);
current = next;
}
free(q);
}
```
这段代码创建了一个循环队列,用于存储杨辉三角形每一行的值。在`print_pascal_triangle`函数中,通过循环遍历每个位置,计算当前数等于上一行的两个相邻数之和,并将结果存入队列。最后,逐个取出队列中的数并打印,形成杨辉三角形。
阅读全文
相关推荐


















