含头文件的队列c语言输出斐波那契数列
时间: 2023-08-22 15:30:39 浏览: 90
以下是使用C语言和队列实现输出斐波那契数列的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列结构体
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 = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue* q) {
return q->front == NULL;
}
// 入队
void enqueue(Queue* q, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isQueueEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队
int dequeue(Queue* q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return -1;
} else {
Node* frontNode = q->front;
int data = frontNode->data;
if (q->front == q->rear) {
q->front = q->rear = NULL;
} else {
q->front = q->front->next;
}
free(frontNode);
return data;
}
}
// 获取队列头部元素
int getFront(Queue* q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return -1;
} else {
return q->front->data;
}
}
// 斐波那契数列的函数
void fibonacci(int n) {
Queue q;
initQueue(&q);
// 先将前两项入队
enqueue(&q, 0);
enqueue(&q, 1);
int i;
for (i = 2; i < n; i++) {
// 出队前两项并相加得到第三项
int first = dequeue(&q);
int second = getFront(&q);
int third = first + second;
// 将第三项入队
enqueue(&q, third);
}
// 输出队列中所有元素
while (!isQueueEmpty(&q)) {
printf("%d ", dequeue(&q));
}
printf("\n");
}
int main() {
int n = 10;
fibonacci(n);
return 0;
}
```
运行结果为:
```
0 1 1 2 3 5 8 13 21 34
```
注:以上代码仅供参考,实际应用中需进行错误处理等完善。
阅读全文