1 栈的简单介绍
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出(First In Last Out,FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作入栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2 基于简单数组的方法实现栈
package Stack_Study;
/**
* Created by Administrator on 2018/5/13.
*/
public class ArrayStack {
private int top;//栈顶元素的位置
private int capacity;//栈的容量
private int[] array;//实现栈功能的数组
public ArrayStack(int capacity) {
this.capacity = capacity;
array = new int[capacity];
top = -1;
}
public int getTop() {
return top;
}
public int getCapacity() {
return capacity;
}
//判断栈中是否有元素
public boolean isEmpty() {
return top == -1;
}
//判断栈中是否存满元素
public boolean isStackFull() {
return (top == capacity - 1);
}
//入栈:将数据压入栈
public void push(int data) {
if(isStackFull()) {
System.out.println("栈已满");
}else {
array[++top] = data;// top = top +1; array[top] = data;
}
}
//出栈:删除并返回最后一个插入栈的元素
public int pop() {
if(isEmpty()) {
System.out.println("栈为空");
return 0;
}else {
return array[top--];//array[top] = data;top = top -1 ;
}
}
//获取栈顶的元素,但不出栈
public int top() {
return array[getTop()];
}
//返回栈中元素的个数
public int size() {
return (top + 1);
}
//删除栈
public void deteleStack() {
top = -1;
}
}
3 测试
package Stack_Study;
/**
* Created by Administrator on 2018/5/13.
*/
public class ArrayStackTest {
public static void main(String[] args) {
ArrayStack stack = new ArrayStack(6);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.pop());
System.out.println(stack.size());
}
}