用队列实现杨辉三角等腰程序c语言
时间: 2024-10-28 16:11:58 浏览: 36
在C语言中,队列(Queue)可以用于构建杨辉三角,尤其是等腰版本,即三角形每一行的最后一个和倒数第二个数都比其他数大。这种实现通常涉及循环结构和队列的操作,如入队(enqueue)和出队(dequeue)。以下是一个简单的C程序,展示了如何利用队列实现杨辉三角的等腰形式:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 10
typedef struct {
int data[MAX_QUEUE_SIZE];
int front;
int rear;
} Queue;
void init_queue(Queue *q) {
q->front = -1;
q->rear = -1;
}
void enqueue(Queue *q, int value) {
if (q->rear == MAX_QUEUE_SIZE - 1) {
printf("Queue overflow!\n");
return;
}
q->rear++;
q->data[q->rear] = value;
}
int dequeue(Queue *q) {
if (q->front == q->rear) {
printf("Queue underflow!\n");
return -1;
}
int value = q->data[q->front];
q->front++;
return value;
}
void print_ascending_pascal_triangle(int n) {
Queue triangle;
init_queue(&triangle);
for (int row = 0; row <= n; row++) {
for (int col = 0; col < row; col++) {
int num = dequeue(&triangle);
if (col > 0 && num != 0) { // 初始行和末尾列除外
enqueue(&triangle, num);
}
printf("%d ", num);
}
// 等腰三角形:最后一列和倒数第二列比其他大
int last_num = dequeue(&triangle);
enqueue(&triangle, last_num);
printf("%d\n", last_num);
enqueue(&triangle, dequeue(&triangle)); // 回填刚才出队的数
}
}
int main() {
int rows = 5; // 输出前5行
print_ascending_pascal_triangle(rows);
return 0;
}
```
这个程序首先初始化一个队列,然后通过嵌套循环遍历每个位置。内部循环处理除首尾外的值,外部循环控制每一行。当到达最后一列时,我们额外处理一下,使得三角形的最后一行符合等腰形状。
阅读全文