栈原理及实现
栈的定义
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。
(1)通常称插入、删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"
最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,
要到最后才能删除。
代码实现:
package ch03;
/**
*
* @author 小明
*
*/
public class MyStack {
//底层实现是数组
private long[] arr;
private int top;
/**
* 默认构造方法
*/
public MyStack(){
arr = new long[10];
top =-1;//-1表示没有数据
}
/**
* 带参数的构造方法
* @param maxsize
*/
public MyStack(int maxsize){
arr = new long[maxsize];
top =-1;//-1表示没有数据
}
/**
* 添加数据
*/
public void push(int value){
arr[++top]=value;
}
/**
* 移除数据
*/
public long pop(){
return arr[top--];
}
/**
* 查看数据
*/
public long peek(){
return arr[top];
}
/**
* 判断是否为空
*/
public boolean isEmpty(){
return top ==-1;
}
/**
* 判断是否满了
*/
public boolean isFull(){
return top ==arr.length-1;
}
}
测试方法:
package ch03;
public class TestMyStack {
public static void main(String[] args) {
MyStack myStack = new MyStack(4);
myStack.push(10);
myStack.push(20);
myStack.push(30);
myStack.push(40);
System.out.println(myStack.isEmpty());
System.out.println(myStack.isFull());
// System.out.println(myStack.peek());
// System.out.println(myStack.peek());
while(!myStack.isEmpty()){
System.err.println(myStack.pop());
}
System.out.println(myStack.isEmpty());
System.out.println(myStack.isFull());
}
}