栈
定义
限定仅在表尾进行插入和删除操作的线性表 。 允许删除和插入操作的一端称为栈顶 ,另一端称为栈底 ,不含任何数据元素的栈称为空栈 。 栈是后进先出 (Last In First Out)的线性表,简称:LIFO结构 。 栈的插入操作叫做进栈 ,也称压栈、入栈。 栈的删除操作叫做出栈 ,也称弹栈。
进栈出栈变化形式
后进先出,先进后出。 三个元素有五种出栈形式。 1进,2进,3进 ,3出,2出,1出; 1进,1出,2进,3进,3出,2出; …
栈的抽象数据结构
同线性表,数据元素具有相同的数据类型,相邻元素具有前驱和后继的关系。
栈的顺序存储结构
栈的顺序存储其实也是线性表顺序存储的简化,简称:顺序栈。 线性表是由数组实现的,用数组下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化量小。
栈的链式存储结构(链栈)
对于链栈来说,基本不会存在满栈的情况。 如果栈的使用过程中元素变化不可预料,有时很小,有时非常大,那么最好用链栈,反之,如果他的变化在可控范围内,建议用顺序栈会更好一点。
递归
每个递归定义必须需要一个条件,满足时不再递归,即不再引用自身而是返回值推出。 斐波那契数列的实现
public static void main ( String [ ] args) {
for ( int i = 1 ; i <= 10 ; i++ ) {
int fbi = fbi ( i) ;
System . out. println ( fbi) ;
}
}
public static int fbi ( int i) {
if ( i < 2 ) {
return i == 0 ? 0 : 1 ;
}
return fbi ( i - 1 ) + fbi ( i - 2 ) ;
}
队列
只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出 的线性表,简称FIFO,允许插入的一端叫做队尾 ,允许删除的一端叫做队头 。