大话数据结构笔记-栈和队列
栈
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。
- 允许插入和删除的一端称为栈顶(top)
- 另一端称为栈尾、底(bottom)
- 不含任何数据元素的栈称为空栈。
栈又称为先进后出的线性表(LIFO)。
插入叫做进栈、压栈、入栈、push
- 删除叫做出栈、弹栈、pop
栈的顺序存储结构
用0下标的一端(就是顺序结构的首个元素)作为栈底,可以简化操作。
(插删过程中移动的元素少。)
两栈共享空间
看了一遍,基本上就是把两个栈口对口存在一个数组中,这样只要两栈的和不超过数组大小就可以。
也就是节省空间的一种方式,有合适的时候可以试一下。
栈的链式存储结构
简称 恋战 链栈
- 链栈的栈顶在链表的头部。
- 链栈不需要头结点。
- 链栈不存在栈满的情况。
如果栈在使用过程中元素变化无法预料,有时很小有时很大,那么最好使用链栈,反之使用顺序栈。
栈的作用
简化程序。
递归就是一种栈的应用。
斐波纳契数列:
有个对新生兔子第2个月可以繁殖,每个月生一对,一年后多少对。
<?php
function f(i)
{
if(i<2) {
return i == 0 ? 0:1;
}
return f(i-1) + f(i-2);
}
//i为月份
n = 0;
for (i = 0; i < 12; i++) {
n = f(i);
}
echo n;
队列
队列(queue)是指允许在一端进行插入操作,而另一端进行删除操作的线性表。
- 队列是先进先出的线性表FIFO
- 允许插入的一端为队尾
- 另一端为对头
把队列的首尾相接的顺序存储结构称为循环队列。
队列的链式存储结构为单链表,只不过只能尾进头出,链队列。