链式栈
采用链式存储结构的栈
push()、pop()、peek()方法的时间复杂度为O(1)java实现:
package com.ds.stack;public class LinkedStack{ /** * title : 单链表类 * * @author zhb * * @param */ private class Node { public T data; // 数据域 保存数据元素 public Node next; // 地址域 引用后继结点 /** * 构造结点, data指定数据元素, next指定后继结点 * * @param data * @param next */ public Node(T data, Node next) { this.data = data; this.next = next; } public Node() { this(null, null); } } Node top = new Node ();// 栈顶结点,单链表结点类 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 (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 stack = new LinkedStack (); 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
如果存在问题,我们随时交流!