java栈的实现(链表型)

//节点对象
package stack;
public class LinkNode<T> {
    private T date;
    private  LinkNode next;
    public T getDate() {
        return date;
    }
    public void setDate(T date) {
        this.date = date;
    }
    public LinkNode getNext() {
        return next;
    }
    public void setNext(LinkNode next) {
        this.next = next;
    }
}


//实现类
package stack;

public class LinkedStack<T> {
    //栈底指针
    private LinkNode base;
    //栈顶指针
    private LinkNode top;
    //栈的当前大小
    private Integer size;


    /**
     * 栈的初始化
     */
   public void InitStack() {

        top = base = new LinkNode();
        size = 0;
    }


    /**
     * 获取栈的大小
     */
    public int StackLenth() {
        return this.size;
    }

    /**
     * 获取栈顶元素
     */
    public T GetTop() {
        return (T) top.getDate();
    }

    /**
     * 入栈
     */
    public void Push(T e) {
        LinkNode<T> newNode = new LinkNode<T>();
        newNode.setDate(e);
        top.setNext(newNode);
        top = newNode;
        size++;
    }

    /**
     * 出栈
     */
    public   T Pop() {

        if (base==top){
            return  null;
        }

        T e=(T) top.getDate();
        size--;
        LinkNode nowNode=base;

        while (nowNode.getNext().getNext()!=null){
            nowNode=nowNode.getNext();
        }
        nowNode.setNext(null);
        top=nowNode;
        return  e;

    }


    /**
     * 获取指定位置的链表中的元素
     */
    public  T getLocateElem(int i){
        LinkNode nowNode=base;
        int j=1;
        while (nowNode!=null&&nowNode.getNext()!=null){
            nowNode=nowNode.getNext();
            if (i==j){
                return  (T) nowNode.getDate();
            }
            j++;
        }

        return  null;
    }

    /**
     * 遍历栈
     */
    public  void print(){

        for (int i = size; i >0 ; i--) {
            System.out.print(this.getLocateElem(i));
        }
        System.out.println();
    }

}



//测试
package test;
import stack.LinkedStack;
public class LinkedStackTest {
    public static void main(String[] args) {
        LinkedStack<Integer> linkedStack=new LinkedStack();
        linkedStack.InitStack();
        linkedStack.Push(1);
        linkedStack.Push(2);
        linkedStack.Push(3);
        linkedStack.print();
        int size=linkedStack.StackLenth();
        for (int i = 0; i < size; i++) {
            System.out.println(linkedStack.Pop());
        }
    }
}


猜你喜欢

转载自blog.csdn.net/qq_20009015/article/details/80723652
今日推荐