利用顺序队列或链式队列打印5层杨辉三角。用来建立队列的链表需要包含头节点,应使用尾插法建立队列。
时间: 2023-04-26 17:01:59 浏览: 167
用队列实现杨辉三角的打印
5星 · 资源好评率100%
好的,我来回复您的问题。
为了打印5层杨辉三角,我们可以利用顺序队列或链式队列来实现。不过,在建立队列的链表时,需要包含头节点,并使用尾插法来建立队列。
具体来说,我们可以先定义一个节点结构体,包含数据域和指针域,如下所示:
```
typedef struct Node {
int data;
struct Node *next;
} Node;
```
然后,我们可以定义一个队列结构体,包含头节点和尾节点指针,如下所示:
```
typedef struct Queue {
Node *front;
Node *rear;
} Queue;
```
接下来,我们可以定义一些队列操作函数,如初始化队列、判断队列是否为空、入队、出队等,具体实现可以参考下面的代码:
```
void initQueue(Queue *q) {
q->front = q->rear = (Node *)malloc(sizeof(Node));
q->front->next = NULL;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
void enqueue(Queue *q, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
q->rear->next = newNode;
q->rear = newNode;
}
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
Node *p = q->front->next;
int data = p->data;
q->front->next = p->next;
if (q->rear == p) {
q->rear = q->front;
}
free(p);
return data;
}
```
有了队列操作函数,我们就可以利用队列来打印杨辉三角了。具体实现可以参考下面的代码:
```
void printYangHuiTriangle(int n) {
Queue q;
initQueue(&q);
enqueue(&q, 1);
for (int i = 1; i <= n; i++) {
int pre = ;
for (int j = ; j < i; j++) {
int cur = dequeue(&q);
printf("%d ", cur + pre);
pre = cur;
enqueue(&q, cur + pre);
}
printf("\n");
enqueue(&q, 1);
}
}
```
在上面的代码中,我们先初始化队列,并将第一行的1入队。然后,我们从第二行开始,每次出队一行的元素,并计算出下一行的元素,将其入队。最后,我们在每行的末尾再入队一个1,以便下一行的计算。
这样,我们就可以利用顺序队列或链式队列打印5层杨辉三角了。希望对您有所帮助!
阅读全文