四.栈和队列

栈(stack):限定仅在线性表表尾进行插入和删除操作的线性表
允许插入和删除的一端称为栈顶;另一端称为栈尾,后进先出,简称LIFO结构

栈的插入操作叫做进栈,也称圧栈,入栈
栈的删除操作叫做出栈,也有的叫做弹栈
两栈共享空间是在数组的两端,让他们向中间靠拢 两指针相差1为栈满
对于栈来说,如果是两个相同数据类型的栈,则可以通过数组的两端作为栈底的方法让两个栈共享数据,这样就可以最大化的利用数组的空间.

链栈是不需要头结点的.

顺序栈需要事先确定一个固定的长度,存在内存空间问题浪费问题,优势是存取时定位很方便
链栈是要求每一个元素都有指针域,增加一些内存开销,优势是对于栈的长度无限制

栈的应用:递归--------裴波那契数列实现
int Fbi(int i)
{
If(i<2)
return i==0?0:1;
return Fbi(i-1)+Fbi(i-2);//这里的Fbi就是函数自己,它在调用自己*
}

递归:直接调用自己或通过一系列的调用语句间接的调用自己的函数,称作递归函数
每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出

栈的应用:四则运算表达式求职
逆波兰表示:一种不需要括号的后缀表达法称为逆波兰表示(RPN)

队列(Queue):允许在一端进行插入操作,而在另一端进行删除操作的线性表

允许插入的一端叫做队尾,允许删除的一端称为队头

循环队列:把这种头尾相接的顺序存储结构称为循环队列
优点:解决移动数据的时间损耗,时间复杂度O(n)变成O(1)

循环队列和链队列差异?
时间上,基本操作都是O(1);不过循环队列是事先申请好空间,使用期间不释放,对于链队列,每次申请和释放结点也会存在一些时间开销
空间上,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题,而链队列不存在这个问题,尽管他需要一个指针域,产生空间上的开销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值