利用循环队列分行打印输出杨辉三角的前八行。。 使用到的函数:①初始化队列;②出队算法;③入队算法;④取队头;⑤主函数。用c语言写,并写出注释
时间: 2024-12-18 16:27:19 浏览: 13
以下是使用C语言通过循环队列来打印杨辉三角前八行的示例,包含了初始化队列、出队算法、入队算法以及取队头的操作:
```c
#include <stdio.h>
#include <stdlib.h> // 需要stdlib.h库来处理动态内存
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init_queue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 出队算法(移除并返回队首元素)
int dequeue(Queue *queue) {
if (queue->front == -1 || queue->front == queue->rear) {
printf("Queue is empty.\n");
return -1;
}
int item = queue->data[queue->front];
queue->front++;
return item;
}
// 入队算法(将元素添加到队尾)
void enqueue(Queue *queue, int value) {
if ((queue->rear + 1) % MAX_SIZE == queue->front) { // 队满
printf("Queue is full.\n");
return;
}
queue->data[(queue->rear + 1) % MAX_SIZE] = value;
queue->rear++;
}
// 取队头操作
int get_front(Queue *queue) {
if (queue->front == -1) {
printf("Queue is empty.\n");
return -1;
}
return queue->data[queue->front];
}
// 主函数
void print_pascal_triangle(int n) {
Queue triangle_queue;
init_queue(&triangle_queue);
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
enqueue(&triangle_queue, i == 0 ? 1 : triangle_queue.data[j - 1] + triangle_queue.data[j]);
// 打印当前行
printf("%d ", triangle_queue.data[j]);
}
printf("\n"); // 换行
// 输出完一行后,从队列中删除已使用的值
while (!queue_is_empty(&triangle_queue)) {
printf("%d ", dequeue(&triangle_queue));
}
printf("\n");
}
}
int main() {
print_pascal_triangle(8);
return 0;
}
```
**注意事项:**
这个程序实现了基本的循环队列结构,用于存储杨辉三角的每一行。由于杨辉三角每个位置的值是由上一行计算得出的,所以在打印每一行之后需要清除已经用过的元素,以便下一行的计算。
阅读全文