자바 스 택 의 두 가지 실현 방식

배열 과 링크 두 가지 방식 으로 스 택 을 실현 했다. 먼저 배열 로 이 루어 진 것 을 보면 비교적 간단 하 다.
import java.util.Arrays;

/*
 *          
 *  :    
 *    push pop peek isEmpty 
 * peek                  peek                stack[size-1]
 *    pop           peek()    
 * push               size+1          stack[size++]   
 *                                 
 */
public class Stack {
    int size;//          
    private Object[] stack;
    public Stack(){
        stack=new Object[10];
    }

    public Boolean isEmpty(){

    return size==0;

    }

    @SuppressWarnings("unchecked")
    public E peek(){
        if(isEmpty()){
            return null;
        }
        return (E) stack[size-1];
    }

    public E push(E item){
        stack[size++]=item;
        return item;
    }


    public E pop(){
        ensureCapacity(size+1);//                                +10   
      E e= peek();
      stack[size-1]=null;
      size--;
      return e; 
    }

    public void ensureCapacity(int size){
        int len =stack.length;
        if (len>size){
            int newLen=10;
            stack=Arrays.copyOf(stack,newLen);
        }

    }


    public static void main(String[] args){
        Stack s=new Stack<>();
        s.push(56);
        s.push(6785);
        s.push(342);
        System.out.println(s.size);
        System.out.println("     "+s.pop());//    342
        System.out.println("     "+s.pop());//   6785
    }
}

다음은 링크 방식 으로 스 택 을 실현 합 니 다. 코드 는 다음 과 같 습 니 다.
/*
 *        
 */

class  Node{
    Nodenext=null;
    E data;
    public Node(E data){this.data=data;}
}
public class LinkedStack {

    Nodetop=null;    //       

    public boolean isEmpty(){
        return top==null;
    }

    /*
     * push     new                    
     *                
     */

    public void push(E data){
        NodenewNode=new Node(data);
        newNode.next=top;//               
        top=newNode;    //          top 
    }

    /*
     * pop           next  next         
     */

    public E pop(){
        if(this.isEmpty()){
            return null;
        }

        E data= top.data;
        top=top.next;
        return data;
    }

    public E peek(){
        if(this.isEmpty()){
            return null;
        }
        E data=top.data;
        return data;
    }//peek pop           top    pop            top    top 


    public static void main(String [] args){
        LinkedStack stack=new LinkedStack<>();
        stack.push(22);
        stack.push(23);
        stack.push(24);
        stack.pop();
        System.out.print(stack.peek());//  :  23

    }

}

좋은 웹페이지 즐겨찾기