循环队列实现杨辉三角C语言数据结构
时间: 2023-07-11 15:47:03 浏览: 120
以下是使用C语言实现循环队列生成杨辉三角的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义循环队列
typedef struct {
int front; // 队首指针
int rear; // 队尾指针
int items[MAX_SIZE]; // 队列元素
} Queue;
// 初始化队列
void init_queue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int is_empty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int is_full(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 元素入队
void enqueue(Queue *q, int item) {
if (!is_full(q)) {
q->items[q->rear] = item;
q->rear = (q->rear + 1) % MAX_SIZE;
}
}
// 元素出队
int dequeue(Queue *q) {
if (!is_empty(q)) {
int item = q->items[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return item;
}
return -1;
}
// 生成杨辉三角
void generate_yanghui_triangle(int n) {
Queue q;
init_queue(&q);
enqueue(&q, 1); // 第一行只有一个数字1
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
printf("%d ", q.items[j]);
}
printf("\n");
for (int j = 0; j <= i; j++) {
enqueue(&q, dequeue(&q) + q.items[j]);
}
enqueue(&q, 1); // 行末添加数字1
}
}
int main() {
generate_yanghui_triangle(5); // 生成5行杨辉三角
return 0;
}
```
代码中定义了一个循环队列结构体Queue,包含front、rear和items三个成员变量。init_queue函数用于初始化队列,is_empty和is_full函数用于判断队列是否为空和已满,enqueue和dequeue函数实现元素的入队和出队操作。generate_yanghui_triangle函数使用队列来生成杨辉三角,通过两个for循环遍历队列中的数字并输出,将队首出队并加上队列中的每个数字,将结果入队,最后再将数字1入队。重复这个过程,就可以生成指定行数的杨辉三角。
阅读全文