一、使用LinkedList类实现将数据压入栈、弹出栈、判断栈是否为空。
首先说明一下为什么使用LinkedList类
|- ArrayList: 它表示内部是使用数组来模拟List的功能,添加和删除的时候效率比较低,查询的时候可以进行随机查找且效率高。
|- LinkedList: 它表示内部是使用链表(单链表,双链表,循环链表)来创建的List,添加和删除的时候效率比较高,查询的时候需要顺序查找。
而栈需要频繁的插入或删除元素,故使用LinkedList类效率较高。
实现代码如下:
/**
* 其中addLast()、removeLast都指向的是栈顶;
* addFirst、removeFirst都指向的是栈底;
*/
class OneStack{
private LinkedList link ;
public OneStack(){
link = new LinkedList();
}
/**
* 入栈,注意:addLast指向的是栈顶是指最后添加的元素
*
*/
public void push(int data){
link.addLast(data);
}
/**
* 出栈,返回栈顶元素并删除,
* 注意:removeLast是指删除最后入栈的那个元素
*/
public int pop(){
return (int) link.removeLast();
}
/**
* 查看栈顶元素
* 注意:当栈没有元素会报异常
*/
public int peek(){
return (int)link.getLast();
}
/**
* 判断栈是否为空,返回 boolean值,
* 直接调用LinkedList的isEmpty()方法。
*/
public boolean empty(){
return link.isEmpty();
}
}
//测试
package zhan;
import java.util.LinkedList;
public class Zhan{
public static void main(String[] args) {
OneStack st =new OneStack();
st.push(1);
System.out.println("此时栈顶元素为: "+st.peek());
st.push(2);
System.out.println("此时栈顶元素为: "+st.peek());
System.out.println(st.pop());
System.out.println(st.empty());
System.out.println(st.pop());
System.out.println(st.empty());
}
}
测试结果如下:
二、使用数组实现将数据压入栈、弹出栈、判断栈是否为空。
代码实现如下:
//栈底层用数组实现
class TwoStack{
private int[] arr;
private int top;
/**
* 默认无参构造函数
*/
public TwoStack(){
arr=new int[3];
top=-1;
}
/**
* 带参数的构造函数
*/
public TwoStack(int maxsize){
arr=new int[maxsize];
top=-1;
}
/**
* 将数据压入栈
*/
public void push(int x){
arr[++top]=x;
}
/**
* 出栈,返回栈顶元素并删除
*/
public int pop(){
return arr[top--];
}
/**
* 查看栈顶元素
*/
public int peek(){
return arr[top];
}
/**
* 判断栈是否为空,返回 boolean值
*/
public boolean isEmpty(){
return top==-1;
}
/**
* 判断栈是否满了,返回boolean值
*/
public boolean isFull(){
return top==arr.length-1;
}
}
//测试
public static void main(String[] args) {
//初始化栈大小,若不初始化则调用默认构造函数,栈大小为3
TwoStack ts=new TwoStack(2);
ts.push(22);
System.out.println("此时栈顶元素为: "+ts.peek());
ts.push(11);
System.out.println("此时栈顶元素为: "+ts.peek());
System.out.println(ts.isFull());
System.out.println(ts.pop());
System.out.println(ts.isEmpty());
System.out.println(ts.pop());
System.out.println(ts.isEmpty());
System.out.println(ts.isFull());
}
测试结果如下: