Java--堆栈的链表实现

堆栈结构的特性就是从栈口入从栈口出,先进的数据只能等到最后再出来。

可以把链表的头指针作为栈口,

入栈就相当于在头指针后添加数据,

出栈就相当于将头指针后面的数据取出来。

package 链表实现堆栈;
public class Node {
    private Object data;
    private Node next;

    public Node() {
        data = null;
        next = null;
    }

    public Node(Object data) {
        this.data = data;
        next = null;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

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

}
package 链表实现堆栈;

public class Link {
    Node head = null;

    public Link() {
        head = new Node();// 初始化头结点
    }

    // 入栈
    public void push(Object obj) {
        Node node = new Node(obj);
        node.setNext(head.getNext());
        head.setNext(node);
    }

    // 判断是否为空
    public boolean isEmpty() {
        return (head.getNext() == null);
    }

    // 出栈
    public Object pop() {
        Object item = null;
        if (isEmpty()) {
            System.out.println("堆栈为空");
            return item;
        }
        item = head.getNext().getData();
        head.setNext(head.getNext().getNext());
        return item;
    }

    // 堆栈大小
    public int size() {
        int len = 0;
        Node pNode = head;
        while (pNode.getNext() != null) {
            len++;
            pNode = pNode.getNext();

        }
        return len;
    }

    // 读取栈顶元素
    public Object peak() {
        Object item = null;
        if (isEmpty()) {
            System.out.println("堆栈为空");
            return item;
        }
        item = head.getNext().getData();
        return item;
    }

    public static void main(String[] args) {
        Link link = new Link();
        link.push("第一个");
        link.push("第二个");
        link.push("第三个");
        link.push("第四个");
        System.out.println(link.isEmpty());// false
        System.out.println(link.peak());// 第四个
        System.out.println(link.pop());// 第四个
        System.out.println(link.size());// 3

    }
}

 

posted @ 2017-03-03 15:42  杯酒故人  阅读(395)  评论(0编辑  收藏  举报