链式栈

采用链式存储结构的栈

push()、pop()、peek()方法的时间复杂度为O(1)


java实现:

package com.ds.stack;
public class LinkedStack<T> {
    /**
     * title : 单链表类
     *
     * @author zhb
     *
     * @param <T>
     */
    private class Node<T> {
        public T data; // 数据域 保存数据元素
        public Node<T> next; // 地址域 引用后继结点
        /**
         * 构造结点, data指定数据元素, next指定后继结点
         *
         * @param data
         * @param next
         */
        public Node(T data, Node<T> next) {
            this.data = data;
            this.next = next;
        }
        public Node() {
            this(null, null);
        }
    }
    Node<T> top = new Node<T>();// 栈顶结点,单链表结点类
    public LinkedStack() {
        this.top = null;
    }
    // 判断是否是空战
    public boolean isEmpty() {
        return this.top == null;
    }
    // 元素 x 入栈
    public void push(T x) {
        if(x != null)
            this.top = new Node<T>(x,this.top);
    }
    // 出栈,返回当前栈顶元素
    public T pop() {
        if(isEmpty()){
            return null;
        }
        T temp = this.top.data;
        this.top = this.top.next;
        return temp;
    }
    // 取出栈顶元素,未出栈
    public T peek() {
        return this.top == null ? null:this.top.data;
    }
                              
     public static void main(String[] args) { 
            LinkedStack<String> stack = new LinkedStack<String>(); 
            stack.push("Java"); 
            stack.push("Php"); 
            stack.push("C++"); 
            stack.push("C#"); 
            System.out.println(stack.pop()); 
            System.out.println(stack.peek()); 
            System.out.println(stack.isEmpty()); 
        } 
}

运行结果:

C++
C++
false



如果存在问题,我们随时交流!