Java实现栈Stack_栈内部使用链式存储结构

Java实现栈Stack_栈内部使用链式存储结构_链式栈

抽象数据类型栈的定义:

栈(stack),是限定在表尾进行插入或删除操作的线性表,因此对栈来说表尾有其特殊的含义,称为栈顶,相应的,表头端称为栈底。不含元素的空表称为空栈。

栈--后进先出(last in first out)

栈-顺序栈-栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素

代码来源:http://zengzhaoshuai.iteye.com/blog/1121238

贴代码:

package hash;

/**
 * 栈的链式表示和实现Java实现
 *
 * @param <T>
 */
public class LinkStack<T> {
    //定义一个内部类Node,Node实例代表链栈的节点。
    private class Node {
        //保存节点的数据
        private T data;
        //指向下个节点的引用
        private Node next;

        //无参数的构造器
        public Node() {
        }

        //初始化全部属性的构造器
        public Node(T data, Node next) {
            this.data = data;
            this.next = next;
        }
    }

    //保存该链栈的栈顶元素
    private Node top;
    //保存该链栈中已包含的节点数
    private int count;

    //创建空链栈
    public LinkStack() {
        //空链栈,top的值为null
        top = null;
    }

    //以指定数据元素来创建链栈,该链栈只有一个元素
    public LinkStack(T element) {
        top = new Node(element, null);
        count++;
    }

    //返回链栈的长度
    public int length() {
        return count;
    }

    //进栈
    public void push(T element) {
        //让top指向新创建的元素,新元素的next引用指向原来的栈顶元素
        top = new Node(element, top);
        count++;
    }

    //出栈
    public T pop() {
        Node oldTop = top;
        //让top引用指向原栈顶元素的下一个元素
        top = top.next;
        //释放原栈顶元素的next引用
        oldTop.next = null;
        count--;
        return oldTop.data;
    }

    //访问栈顶元素,但不删除栈顶元素
    public T peek() {
        return top.data;
    }

    //判断链栈是否为空栈
    public boolean empty() {
        return count == 0;
    }

    //清空链栈
    public void clear() {
        //将底层数组所有元素赋为null
        top = null;
        count = 0;
    }

    public String toString() {
        //链栈为空链栈时
        if (empty()) {
            return "[]";
        } else {
            StringBuilder sb = new StringBuilder("[");
            for (Node current = top; current != null; current = current.next) {
                sb.append(current.data.toString() + ",");
            }
            int len = sb.length();
            return sb.delete(len - 2, len).append("]").toString();
        }
    }

    public static void main(String args[]) {
        LinkStack<String> stringLinkStack = new LinkStack<String>();//创建一个空栈

        for (int i = 0; i < 100; i++) {
            stringLinkStack.push("lyx" + i);
        }

        for (int i = 0; i < 20; i++) {
            System.out.println(stringLinkStack.pop());
        }

        System.out.println("=======================");

        for (int i = 0; i < 20; i++) {
            System.out.println(stringLinkStack.peek());
        }
    }
}

==============================END==============================

转载于:https://my.oschina.net/xinxingegeya/blog/313460

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值