java数据机构之自定义栈

一、栈的特点

  1、线性数据结构

  2、后进先出

 

二、使用数组来实现栈

//使用数组来实现栈
public class MyArrayStack<E> {
    
    //保存数据
    private Object[] items;
    
    //栈的 容量
    private int capacity;
    
    //栈的数据个数
    private int size;

    public MyArrayStack(int capacity){
        this.capacity = capacity;
        this.items = new Object[capacity];
    }
    
    //入栈
    public boolean push(E item){
        //栈已经满了
        if(size == capacity){
            return false;
        }
        items[size++] = item; 
        return true;
    }
    
    //出栈
    @SuppressWarnings("unchecked")
    public E pop() {
        if(size == 0){
            return null;
        }
        E e = (E)items[size-1];
        items[--size] = null;
        return e;
    }
    

}

 

 

 

三、使用链表来实现栈、

//使用链表创建栈
public class MyLinkedStack<E> {

    //节点存储元素信息
    private static class Node<E>{
        
        E item;
        
        Node<E> next;//下一个节点
        
        Node(E item, Node<E> next){
            this.item = item;
            this.next = next;
        }
    }

    
    //栈的 容量
    private int capacity;
    
    //栈的数据个数
    private int size;
    
    //头节点
    private Node<E> head;
    
    public MyLinkedStack(int capacity){
        this.capacity = capacity;
    }
    
    //入栈
    public boolean push(E item){
        //栈已经满了
        if(size == capacity){
            return false;
        }
        //创建新节点,head指向新的节点
        Node<E> node = new Node<>(item,head);
        head = node;
        size++;
        return true;
    }
    
    //出栈
    public E pop() {
        if(size == 0){
            return null;
        }
        E e = head.item;
        head.item = null;//方便GC
        head = head.next;
        size--;
        return e;
    }

    
}

 

posted @ 2019-05-16 11:25  KyleInJava  阅读(650)  评论(0编辑  收藏  举报