这看上去是一个简单的话题,但是要注意几个点:
1.要注意入栈的时候判断
在入栈的时候要注意先判断栈是否已经满了
如果栈已经满了则要注意扩展数组的长度,不然会造成越界
public void push(int item) { if (size == array.length) { array = Arrays.copyOf(array, size * 2); } array[size++] = item; }
2.要注意出栈的时候判断
在出栈的时候要注意先判断栈是否已经空了
如果栈已经空了则要抛异常
public int peek() { if(isFull()) { throw new IndexOutOfBoundsException("Stack OverFlow"); } return array[size - 1]; }
以下是完整代码,直接上源码
import java.util.Arrays; public class StackSS { private int size = 0; private int []array; //无参的构造函数 public StackSS() { this(10); } //传入数组长度的参数 public StackSS(int init) { if (init < 0) { init = 10; } array = new int[init]; } //返回栈的长度 public int size() { return size; } //判断栈是否为空 public boolean isEmpty() { return size == 0; } //判断栈是否已经满了 public boolean isFull() { return size == array.length; } //获取栈顶元素但不出栈 public int peek() { if(isFull()) { throw new IndexOutOfBoundsException("Stack OverFlow"); } return array[size - 1]; } //入栈 public void push(int item) { if (size == array.length) { array = Arrays.copyOf(array, size * 2); } array[size++] = item; } //获取栈顶元素且出栈 public int pop() { int item = peek(); size--; return item; } public static void main(String[] args) { StackSS ss = new StackSS(); ss.push(10); ss.push(20); ss.push(30); System.out.println("栈的长度为:" + ss.size()); ss.pop(); System.out.println("30出栈以后现在栈顶元素为: " + ss.peek()); ss.pop(); System.out.println("20出栈以后现在栈顶元素为: " + ss.peek()); ss.push(15); System.out.println(ss.size); } }