用队列相关基本操作实现输出杨辉三角c语言
时间: 2023-10-12 17:05:11 浏览: 133
```c
#include <stdio.h>
#define MAX_ROW 10
int main() {
int triangle[MAX_ROW][MAX_ROW];
int row, col, num;
// 初始化第一列
for (row = 0; row < MAX_ROW; row++) {
triangle[row][0] = 1;
}
// 初始化其他列
for (row = 1; row < MAX_ROW; row++) {
for (col = 1; col <= row; col++) {
triangle[row][col] = triangle[row-1][col-1] + triangle[row-1][col];
}
}
// 输出杨辉三角
for (row = 0; row < MAX_ROW; row++) {
for (num = 0; num < MAX_ROW-row; num++) {
printf(" ");
}
for (col = 0; col <= row; col++) {
printf("%6d", triangle[row][col]);
}
printf("\n");
}
return 0;
}
```
相关问题
C语言队列操作实现输出杨辉三角的程序
好的,让我来为您解答。下面是一个基于队列实现输出杨辉三角的 C 语言程序:
```c
#include<stdio.h>
#include<stdlib.h>
// 定义队列结构体
typedef struct {
int *data;
int front, rear;
} Queue;
// 初始化队列
void initQueue(Queue *q, int size) {
q->data = (int *)malloc(sizeof(int) * size);
q->front = q->rear = 0;
}
// 入队操作
int enQueue(Queue *q, int e) {
q->data[q->rear++] = e;
return 1;
}
// 出队操作
int deQueue(Queue *q, int *e) {
if (q->front == q->rear) return 0;
*e = q->data[q->front++];
return 1;
}
// 输出杨辉三角
void printTriangle(int n) {
Queue q1, q2;
int i, j, a, b;
// 初始化两个队列
initQueue(&q1, n);
initQueue(&q2, n);
// 第一行
enQueue(&q1, 1);
for (i = 1; i <= n; i++) {
// 输出当前行
for (j = 0; j < n - i; j++)
printf(" ");
while (deQueue(&q1, &a)) {
printf("%3d", a);
// 计算下一行元素值
if (deQueue(&q1, &b)) {
enQueue(&q2, a + b);
enQueue(&q1, b);
}
}
printf("\n");
// 将第二行元素移动到第一行
while (deQueue(&q2, &a)) enQueue(&q1, a);
// 在队列尾部添加 0 表示下一次计算已结束
enQueue(&q1, 0);
}
// 释放队列内存
free(q1.data);
free(q2.data);
}
int main() {
int n;
printf("请输入杨辉三角行数:");
scanf("%d", &n);
printTriangle(n);
return 0;
}
```
该程序使用两个队列,依次存储杨辉三角每一行的元素值。输出一行后,将第二个队列中的元素移动到第一个队列中,然后在第一个队列尾部添加一个 0,表示下一行的计算已结束。程序最终输出一个 n 行的杨辉三角。
用队列实现杨辉三角c语言
杨辉三角是一个由数字构成的三角形,其中每个数字都是它上方两个数字之和。要用队列来实现杨辉三角,首先需要创建一个队列。在C语言中,可以用数组来表示队列,并使用两个指针(front和rear)来指向队列的前端和后端。
首先,我们创建一个函数来生成杨辉三角,并将结果存储在队列中。
```c
#include <stdio.h>
#define MAX_SIZE 100
int queue[MAX_SIZE];
int front = -1;
int rear = -1;
// 入队
void enqueue(int num) {
if (rear == MAX_SIZE-1) {
printf("队列已满\n");
return;
}
if (front == -1 && rear == -1) {
front = 0;
rear = 0;
} else {
rear++;
}
queue[rear] = num;
}
// 出队
int dequeue() {
if (front == -1 || front > rear) {
printf("队列为空\n");
return -1;
}
int num = queue[front];
front++;
return num;
}
// 生成杨辉三角
void generateYanghuiTriangle(int numRows) {
for (int i = 0; i < numRows; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
enqueue(1);
} else {
int a = dequeue();
int b = queue[front];
enqueue(a + b);
}
printf("%d ", queue[j]);
}
printf("\n");
}
}
int main() {
int numRows;
printf("请输入杨辉三角的行数:");
scanf("%d", &numRows);
generateYanghuiTriangle(numRows);
return 0;
}
```
在上述代码中,我们首先定义了一个可以最大容纳100个元素的队列,并初始化了front和rear指针。enqueue函数用于将元素存储到队列中,dequeue函数用于从队列中取出元素。generateYanghuiTriangle函数根据输入的行数生成杨辉三角,并将每一行的数字存储到队列中,然后打印每个数字。在main函数中,我们接受用户输入的行数,并调用generateYanghuiTriangle函数来生成杨辉三角。
阅读全文
相关推荐














