2021-12-21 数据结构 期末复习机考之二 栈
2021/12/22 23:21:27
本文主要是介绍2021-12-21 数据结构 期末复习机考之二 栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
栈和队列都是特殊的线性表,因此定义栈和队列与之前的线性表异曲同工:
顺序栈
顺序栈的架构
顺序栈的特点
top=0 或top=base 表示空栈
base=NULL表示栈不存在
当插入新的栈顶元素时,指针top+1
删除栈顶元素时,指针top-1
当top>stacksize时,栈满,溢出
注意,此处的top栈顶指针是指向栈顶元素的下一个元素,也有一种说法是指向栈顶元素,两种都可,此处采用前者
1、创建栈
或
typedef int SElemType; typedef struct{ SElemType data[MAXSIZE]; int top;//栈顶指针 }
或使用STL库的栈
头文件#include <stack>
关于入栈操作
Status Push(SqStack *S,SElemType e){ if(S->top == MAXSIZE-1){ return ERROR; } S->top++; S->data[S->top]==e; return ok; }
或者
关于出栈操作
可以
Status Pop(SqStack *S, SElemType *e){ if(S->top==-1) return ERROR; *e=S->data[S->top]; S->top--; return OK; }
或者
亦或者
这里是先打印再弹出
判栈满的函数
用STL栈无法实现栈满的监测,因为STL栈没有栈满这个概念。
链栈
我们知道栈顶是一个栈做压入和弹出的地方,而链表形态下也拥有一个头指针,那么我们就可以利用头指针作为栈顶指针,对于链栈而言,因为栈顶是在链表头部,因此不存在栈满的情况(除非内存已满)
对于链栈而言,它和链表空的条件一样,就是头指针(栈顶指针)top==NULL
栈的应用【编程】递归
说到递归,著名的斐波拉契数列就是一个递归数列,而斐波拉契数就是指符合斐波拉契数列运算方式得来的数。
上图就是斐波拉契数列的原理,可以看到,除了0,1之外,斐波拉契数列的n项等于n-1和n-2项之和。直观实现特定位数的斐波拉契数列的程序在上面。但是不够简洁,不能提现斐波拉契的精髓
看看修改过的程序:
#include<iostream> using namespace std; int Feibo(int i){ if(i<2) return i == 0?0:1; return Feibo(i-1)+Feibo(i-2); } int main(){ int n=0; cin>>n; cout<<Feibo(n)<<endl; return 0; }
/Users/yuwenao/untitled12/cmake-build-debug-/untitled12 9 34 进程已结束,退出代码为 0
实现了,优美的递归运用,通过三行代码实现feibo。而递归是
这篇关于2021-12-21 数据结构 期末复习机考之二 栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04百万架构师第六课:设计模式:策略模式及模板模式
- 2025-01-04百万架构师第七课:设计模式:装饰器模式及观察者模式
- 2025-01-04适用于企业管理的协作工具API推荐
- 2025-01-04挑战16:被限流的CPU
- 2025-01-03企业在选择工具时,如何评估其背后的技术团队
- 2025-01-03Angular中打造动态多彩标签组件的方法
- 2025-01-03Flask过时了吗?FastAPI才是未来?
- 2025-01-0311个每位开发者都应知道的免费实用网站
- 2025-01-03从REST到GraphQL:为什么以及我是如何完成转型的
- 2025-01-03掌握RAG:从单次问答到连续对话