Java使用链表实现栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljxbbss/article/details/78127036


大话数据结构中,这一块其实对于初学的还是挺难的,我看了小半天,最后才转过弯来,

首先看图,图中箭头指明了思路,一开始我对链表的头部没想明白,后来想通了,就是每次压栈就相当于将元素放在链表头部,即栈顶指针元素相当于链表中的首节点;


因此每次插入一个,都需要将插入前的栈顶结点赋值给新节点的next结点属性;

每次弹栈,都需要将top的next指向元素置为top元素;
下面上代码:
class Node {

    Node next;
    Object element;

    public Node(Node next, Object element) {
        this.next = next;
        this.element = element;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Object getElement() {
        return element;
    }

    public void setElement(Object element) {
        this.element = element;
    }

}


public class LinkListStack {

    int count;//当前栈内元素个数
    Node top;//栈顶指针
    int size;//栈大小


    //初始化一个空栈
    LinkListStack() {
        top = null;
        count = 0;
        size = 10;
    }

    //构造一个指定大小的空栈
    LinkListStack(int size) {
        top = null;
        count = 0;
        this.size = size;
    }


    /**
     * 采用这种方法代表这每插入一个元素,新的变成栈顶元素,同时每次都是链表的头结点
     *
     * @param element
     * @return
     */
    public boolean push(Object element) {

        if (isFull()) {
            return false;
        }

        //1.将插入前的栈顶元素变成新插入结点的next指针指向元素,2.新插入元素变成栈顶结点

        top = new Node(top, element);

        count++;

        return false;
    }

    public Object pop() {
        if (isEmpty()) {
            System.out.println("栈为空");
            return null;
        }
        Object element = top.getElement();
        top = top.getNext();
        count--;
        return element;
    }

    public boolean isEmpty() {
        return count == 0 ? true : false;
    }

    public int size() {
        return count;
    }

    public Object peek() {
        if(isEmpty()){
            return null;
        }
        return top.getElement();
    }


    public boolean isFull() {
        return this.count == this.size ? true : false;
    }



    public static void main(String[] args) {


        LinkListStack stack = new LinkListStack();

        stack.push("元素1");
        stack.push("元素2");
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek()+";"+stack.count);

    }


}
记录走过的历程。


猜你喜欢

转载自blog.csdn.net/ljxbbss/article/details/78127036
今日推荐