目录
1. 什么是栈
栈(stack)是一种存储逻辑关系的线性存储结构。与其他线性表不同,栈的一端是封闭的,所有数据只能从另一端进出。被封闭的一端称为栈底,允许数据进出的一端称为栈顶。这样的结构导致数据的存储遵从“后进先出LIFO”的原则,即先存储的数据后出,后存储的数据先出。
对栈的操作一般有以下两种:
压栈(push):将数据存储进栈中,最后进的元素被称之为栈顶元素。
出栈(pop):将栈顶的数据弹出。
2. 栈的实现方式
基于栈的结构特点,栈的具体实现方式主要包括以下两种:
顺序栈:底层采用的是数组,使用顺序存储结构来模拟栈存储结构的特点。
链栈:底层采用的是链表,采用链式存储结构来实现栈。
两种实现方式的区别,仅限于数据元素在实际物理空间上存放的相对位置。
2.1 顺序栈
基于数组的实现方式。JAVA代码如下:
class stack {
int top;
int[] array;
public stack (){
this.top = -1;
this.array = new int[10];
}
public stack(int length){
this.array = new int[length];
this.top = -1;
}
//压栈
public void push(int val){
top = top+1;
array[top] = val;
}
//出栈
public int pop(){
if(array.length!=0){
int a = array[top];
top--;
return a;
}
else {
return -1;
}
}
//求栈的大小
public int size(){
return top+1;
}
}
2.2 链栈
使用链表存储。压栈相当于在尾部添加元素,出栈相当于删除最后一个元