利用队列实现打印杨辉三角要源码事例用C语言
时间: 2024-10-22 08:14:04 浏览: 34
在C语言中,我们可以利用队列数据结构来实现打印杨辉三角。杨辉三角是一个经典的组合数学问题,每一行都是前一行数字之和的递推过程。以下是使用队列的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 入队操作
void enqueue(Queue *queue, int num) {
if (queue->rear == MAX_SIZE - 1) {
printf("Queue is full.\n");
return;
}
queue->data[++queue->rear] = num;
if (queue->front == -1) {
queue->front = 0;
}
}
// 出队操作
int dequeue(Queue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty.\n");
return -1;
}
int temp = queue->data[queue->front++];
return temp;
}
// 打印杨辉三角
void printPascalTriangle(int n, Queue *queue) {
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= n - i; ++j) {
if (j == 0 || j == n - i) {
enqueue(queue, 1);
} else {
int left_num = dequeue(queue);
int right_num = dequeue(queue);
enqueue(queue, left_num + right_num);
}
printf("%d ", queue->data[queue->rear]);
}
printf("\n");
while (!queue_empty(queue)) {
enqueue(queue, dequeue(queue));
}
}
}
int main() {
Queue triangle_queue;
init(&triangle_queue);
// 假设我们想要打印5行的杨辉三角
int n = 5;
printPascalTriangle(n, &triangle_queue);
return 0;
}
```
在这个例子中,`enqueue()`函数用于入队数字,`dequeue()`函数用于出队数字,并在打印杨辉三角时按顺序操作。需要注意的是,这个实现假设了队列内部的数据结构已经按照递增顺序存储,这并不是标准队列的行为,但在这种特殊场景下可以工作。
阅读全文