~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌
如果需要完整代码可以关注下方公众号,后台回复“代码”即可获取,阿光期待着您的光临~
✌ 题目及题解持续更新中
【2023王道数据结构目录】课后算法设计题C、C++代码实现完整版大全
题目: 利用栈实现斐波那契数列
解题思路:
斐波那契数列两种实现: >利用递归,无需多说 >利用栈,就是找二叉树的叶子结点个数,不断将子节点压入栈中
代码实现:
#includeusing namespace std; #define MAXSIZE 100 //定义栈 typedef struct { int data[MAXSIZE]; int top1 = -1; } Stack; //判断栈是否为空 bool StackEmpty(Stack s) { if (s.top1 == -1) { return true; } return false; } //判断栈是否溢出 bool StackOverflow(Stack s) { if (s.top1 >= MAXSIZE) { return true; } return false; } //压栈 void Push(Stack &s, int x) { if (!StackOverflow(s)) { s.data[++s.top1] = x; } else { cout << "当前栈已满" << endl; } } //弹栈 int Pop(Stack &s) { if (StackEmpty(s)) { cout << "当前栈已空" << endl; return ' '; } else { return s.data[s.top1--]; } } //利用递归实现斐波那契数列 int FibRecursion(int n) { if (n == 1 || n == 2) { return 1; } return FibRecursion(n - 1) + FibRecursion(n - 2); } //利用栈实现斐波那契数列 int FibStack(int n) { Stack s; //初始化栈 int result = 0; Push(s, n); //将根节点压入栈中 while (!StackEmpty(s)) { //将栈顶元素弹出 int value = Pop(s); //计算叶子结点个数 if (value == 1 || value == 2) { result += 1; } //将根节点的两个子节点压入栈中 else { Push(s, value - 1); Push(s, value - 2); } } return result; } int main() { cout << FibRecursion(7) << endl; cout << FibStack(7) << endl; }



