使用陣列實現棧
阿新 • • 發佈:2018-12-23
//使用陣列來實現棧 package 陣列實現棧; import java.util.Arrays; interface StackADT { public void push(Object element);//壓棧 public Object pop();//出棧 public boolean isEmpty();//判斷是否為空棧 public int size(); public Object peek(); public String toString(); } public class Stack implements StackADT { private final int DEFAULT_SIZE = 3; //預設陣列大小 private int size = 0; private int capacity = 0; //top指向下一個能夠新增元素的位置 private int top = 0; private Object[] array; public Stack() {//設定陣列初始大小 this.capacity = this.DEFAULT_SIZE; this.array = new Object[this.capacity]; this.size = 0; } public Stack(int capacity) { //控制陣列容量 this.capacity = capacity; this.array = new Object[this.capacity]; this.size = 0; } @Override public void push(Object element) { //壓棧 if (this.size < this.capacity) { this.array[top] = element; this.top++; this.size++; } else { enlarge(); push(element); } } public void enlarge() { //擴容 this.capacity = this.capacity + this.DEFAULT_SIZE; Object[] newArray = new Object[this.capacity]; System.arraycopy(array, 0, newArray, 0, array.length); Arrays.fill(array, null); this.array = newArray; } @Override public Object pop() { //檢視棧頂元素並將棧頂元素刪除 Object element = (Object) this.array[top - 1]; this.array[top - 1] = null; this.size--; return element; } @Override public boolean isEmpty() { //判斷棧是否為空 return size == 0; } @Override public int size() { //返回棧的大小 return size; } @Override public Object peek() { //檢視棧頂元素但不刪除 return (Object) this.array[this.top - 1]; } public static void main(String[] args) { Stack s = new Stack(); s.push(1); s.push(2); s.push(3); System.out.println(s.pop()); System.out.println(s.size()); } }