c语言实现顺序循环队列应用-杨辉三角
时间: 2023-10-31 17:04:32 浏览: 136
顺序循环队列可以用数组来实现,我们可以定义一个数组来表示队列,再定义队首和队尾指针来指示队列的头和尾。在队列为空的时候,队首和队尾指针相等,当队列满时,队尾指针会指向数组的最后一个元素,而队首指针会指向数组的第一个元素。队列的基本操作包括入队和出队。
杨辉三角是一个数学上的图形,由于它的特殊性质,它也可以用队列来实现。具体实现方法如下:
1. 定义一个二维数组来存储杨辉三角的数值,同时定义一个队列来存储每一行的数值。
2. 首先将第一行的数值入队,然后从队列中取出队首元素,根据它可以计算出下一行的数值。
3. 将下一行的数值入队,重复上述操作,直到计算到第n行为止。
下面是代码实现:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE]; // 存储队列元素
int front; // 队首指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int QueueEmpty(SqQueue *q) {
return q->front == q->rear;
}
// 入队
int EnQueue(SqQueue *q, int x) {
if ((q->rear + 1) % MAXSIZE == q->front)
return 0; // 队列已满
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
return 1;
}
// 出队
int DeQueue(SqQueue *q, int *x) {
if (q->front == q->rear)
return 0; // 队列为空
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return 1;
}
// 输出杨辉三角
void PrintTriangle(int n) {
int triangle[MAXSIZE][MAXSIZE];
SqQueue q;
InitQueue(&q);
// 计算杨辉三角的数值
for (int i = 0; i < n; i++) {
// 将第一行的数值入队
EnQueue(&q, 1);
// 计算当前行的数值
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i)
triangle[i][j] = 1;
else {
int x, y;
// 取出队首元素和它的下一个元素
DeQueue(&q, &x);
DeQueue(&q, &y);
triangle[i][j] = x + y;
// 将计算得到的数值入队
EnQueue(&q, y);
}
// 将当前行的数值入队
EnQueue(&q, triangle[i][j]);
printf("%d ", triangle[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("Please input the number of rows of the triangle: ");
scanf("%d", &n);
PrintTriangle(n);
return 0;
}
```
这个程序可以输出指定行数的杨辉三角,例如输入6,输出结果如下:
```
Please input the number of rows of the triangle: 6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
```
阅读全文