队列法求斐波那契数列前20项
时间: 2023-08-04 13:33:11 浏览: 100
使用队列可以比递归更高效地求解斐波那契数列。以下是使用队列法求解斐波那契数列前20项的示例代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
int a = 0, b = 1;
q.push(a);
q.push(b);
for (int i = 2; i < 20; i++)
{
int c = a + b;
q.push(c);
a = b;
b = c;
}
for (int i = 0; i < 20; i++)
{
cout << q.front() << " ";
q.pop();
}
return 0;
}
```
在上面的代码中,我们使用一个队列来存储斐波那契数列的前两项,然后依次计算后面的项并将它们加入队列中。最后,我们输出队列中的前20项即可。
相关问题
含头文件的队列c语言输出斐波那契数列
以下是使用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
```
注:以上代码仅供参考,实际应用中需进行错误处理等完善。
含有头文件实现文件的队列c语言输出斐波那契数列
以下是使用C语言和队列实现输出斐波那契数列的示例代码,其中包含头文件和实现文件:
#### queue.h
```c
#ifndef QUEUE_H_
#define QUEUE_H_
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
void initQueue(Queue* q);
int isQueueEmpty(Queue* q);
void enqueue(Queue* q, int data);
int dequeue(Queue* q);
int getFront(Queue* q);
#endif /* QUEUE_H_ */
```
#### queue.c
```c
#include "queue.h"
#include <stdlib.h>
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;
}
}
```
#### fibonacci.c
```c
#include <stdio.h>
#include "queue.h"
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
```
注:以上代码仅供参考,实际应用中需进行错误处理等完善。
阅读全文
相关推荐









