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(); StackArray stack = test.new StackArray(9); stack.push(1); stack.push(2); stack.push(3); stack.push(5); stack.push(6); stack.push(7); // 打印 display("栈内元素:", stack); int top = (int) stack.peek(); System.out.println("栈顶: " + top); // 栈顶出栈 stack.pop(); // 打印 display("栈内元素:", stack); } // 显示 public static void display(String str, StackArray stack) { System.out.println(str); for (int i = stack.getSize() - 1; i >= 0; i--) { System.out.print(stack.elements[i].toString() + ' '); } 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 class StackArray implements Stack { //private final int LEN = 9; //数组的默认大小 private Object[] elements; // 数据元素数组 private int top; // 栈顶指针 public StackArray(int LEN) { top = -1; elements = new Object[LEN]; } // 返回堆栈的大小 public int getSize() { return top + 1; } // 判断堆栈是否为空 public boolean isEmpty() { return top < 0; } // 数据元素e入栈 public void push(Object e) { if (getSize() >= elements.length) expandSpace(); elements[++top] = e; } private void expandSpace() { Object[] a = new Object[elements.length * 2]; for (int i = 0; i < elements.length; i++) a[i] = elements[i]; elements = a; } // 栈顶元素出栈 public Object pop() throws StackEmptyException { if (getSize() < 1) throw new StackEmptyException("错误,堆栈为空。"); Object obj = elements[top]; elements[top--] = null; return obj; } // 取栈顶元素 public Object peek() throws StackEmptyException { if (getSize() < 1) throw new StackEmptyException("错误,堆栈为空。"); return elements[top]; } } }
栈内元素:
7 6 5 3 2 1
栈顶: 7
栈内元素:
6 5 3 2 1