java栈的实现有两种方式:
一.使用数组来实现:
//使用数组实现栈,功能包括进行内存扩展 public class Stack { private int []data; private int length;//表示初始化栈的内存长度 private int top;//用来表示栈的实际长度 private final int expandLength=20;//表示扩展的长度 public Stack(int length){ this.length=length; top=-1;//初始化为-1 data=new int[length]; } //压栈 public void push(int value){ if(top<length-1) data[++top]=value; else{ //进行内存扩展 int []temp=new int[length+expandLength]; for(int i=0;i<length;i++){ temp[i]=data[i]; } data=temp; data[++top]=value; } } //出栈 public int pop(){ return data[top--]; } //返回栈头元素 public int peek(){ return data[top]; } //返回栈的长度 public int getLength(){ return top+1; } //判断是否为满 public boolean isfull(){ return(top==length-1); } }
二.使用数组线性表来实现栈:
//使用线性表实现栈的存储,这样不需要考虑内存扩展的情况 import java.util.*; public class linkedStack<T> { private LinkedList<T> Linkedlist;//定义一个线性表 public linkedStack(){ Linkedlist=new LinkedList<T>(); } //压栈 public void push(T value){ Linkedlist.add(value); } //出栈 public T pop(){ T data=Linkedlist.get(getLength()-1); Linkedlist.remove(getLength()-1); return data; } //得到栈头元素 public T peek(){ return Linkedlist.get(Linkedlist.size()-1); } //栈的长度 public int getLength(){ return Linkedlist.size(); } }
就我个人而言,我更喜欢第二种实现方法,第二种可以自己定义所要存储的数据类型,有人会说为啥第一种方法不用泛型,我有试过,但是会非常麻烦。首先泛型对数组的定义本来就要限制,所以综合考虑,本人就在第一种方法中简化了,定义数据类型为int类型.如果大家有更好的方法,希望能提出,相互提高,这里仅仅表明我个人的想法。
转载于:https://blog.51cto.com/8831691/1402236