疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java栈的两种实现方法


 

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();
    }
}