package com.ssm.cts.test; /** * CopyRright (c)2018-2028: chanpinxue.cn * Project: cts * Module Name: StackTest * Comments: 栈 * JDK version used: JDK1.8 * Author: jzh * Create Date: 2018-12-04 * Modified By: jzh * Modified Date: 2018-12-04 * Why & What is modified: * Version: <1.0> */ public class StackTest { // 测试 public static void main(String[] args) { // No enclosing instance of type StackTest is accessible. // Must qualify the allocation with an enclosing instance of type StackTest (e.g. x.new A() where x is an instance of StackTest). StackTest test = new StackTest(); StackSLinked stackSLinked = test.new StackSLinked(); stackSLinked.push(11); stackSLinked.push(22); stackSLinked.push(33); stackSLinked.push(55); stackSLinked.push(66); stackSLinked.push(77); // 打印 display("栈的链式存储实现-栈内元素:", stackSLinked.top); // 栈顶出栈 stackSLinked.pop(); // 打印 display("栈的链式存储实现-栈内元素:", stackSLinked.top); } // 显示 public static void display(String str, SLNode node) { System.out.println(str); while (node != null) { System.out.print(node.getData() + " "); node = node.next; } System.out.println(); } // 栈基本功能接口 public interface Stack { // 返回堆栈的大小 public int getSize(); // 判断堆栈是否为空 public boolean isEmpty(); // 数据元素e入栈 public void push(Object e); // 栈顶元素出栈 public Object pop() throws StackEmptyException; // 取栈顶元素 public Object peek() throws StackEmptyException; } @SuppressWarnings("serial") public class StackEmptyException extends RuntimeException { public StackEmptyException(String err) { super(err); } } public interface Node { // 获取结点数据域 public Object getData(); // 设置结点数据域 public void setData(Object obj); } public class SLNode implements Node { private Object element; private SLNode next; public SLNode() { this(null, null); } public SLNode(Object ele, SLNode next) { this.element = ele; this.next = next; } public SLNode getNext() { return next; } public void setNext(SLNode next) { this.next = next; } /**************** Methods of Node Interface **************/ public Object getData() { return element; } public void setData(Object obj) { element = obj; } } // 栈的链式存储实现 public class StackSLinked implements Stack { private SLNode top; // 链表首结点引用 private int size; // 栈的大小 public StackSLinked() { top = null; size = 0; } // 返回堆栈的大小 public int getSize() { return size; } // 判断堆栈是否为空 public boolean isEmpty() { return size == 0; } // 数据元素e入栈 public void push(Object e) { SLNode q = new SLNode(e, top); top = q; size++; } // 栈顶元素出栈 public Object pop() throws StackEmptyException { if (size < 1) throw new StackEmptyException("错误,堆栈为空。"); Object obj = top.getData(); top = top.getNext(); size--; return obj; } // 取栈顶元素 public Object peek() throws StackEmptyException { if (size < 1) throw new StackEmptyException("错误,堆栈为空。"); return top.getData(); } } }