棧底層實現是一個數組,可以做到先進後出原則。入棧和出棧都操作棧頂元素
package stack.init;
public class MyStack {
/**
* 棧最大長度
*/
private int size;
/**
* 棧底層實現 數組
*/
private int[] arrays;
/**
* 臨時變量指向 棧頂元素
*/
private int top;
/**
* 默認初始化
*/
public MyStack() {
size = 10;
arrays = new int[size];
top = -1;
}
/**
* 自定義初始化
*
* @param size
*/
public MyStack(int size) {
if (size <= 0) {
throw new IllegalArgumentException("初始容量不能爲" + size);
}
this.size = size;
arrays = new int[size];
top = -1;
}
/**
* 判斷棧是否爲空
*
* @return
*/
public boolean isEmpty() {
if (top == -1) {
return true;
}
return false;
}
/**
* 判斷棧是否已滿
*
* @return
*/
public boolean isFull() {
if (top == size - 1) {
return true;
}
return false;
}
/**
* 向棧頂插入元素
*
* @param value
*/
public void push(int value) {
if (isFull()) { // 棧已滿
// 自動擴容
} else {
// 將元素插入棧頂
top++;
arrays[top] = value;
}
}
/**
* 訪問棧頂元素
*
* @return
*/
public int peek() {
if (top == -1) { // 空棧
throw new IndexOutOfBoundsException("棧爲空");
}
// 獲取棧頂元素
return arrays[top];
}
/**
* 彈出棧頂元素
*
* @return
*/
public int pop() {
int size = peek();
remove(top);
return size;
}
/**
* 刪除棧頂元素
*
* @return
*/
public void remove(int top) {
arrays[top] = -1;
this.top--;
}
}
測試類
import stack.init.MyStack;
import java.util.Stack;
public class Test {
/**
* 棧初始化
*/
public void myStack(){
// 1. 初始化 自動擴容
MyStack myStack = new MyStack();
// 2. 判斷棧是否爲空
System.out.println("棧是否爲空:" + myStack.isEmpty());
// 3. 判斷棧是否滿
System.out.println("棧是否滿:" + myStack.isFull());
// 4. 向棧中添加元素
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
myStack.push(5);
myStack.push(6);
myStack.push(7);
myStack.push(8);
myStack.push(9);
myStack.push(10);
// 5. 訪問棧頂元素
System.out.println(myStack.peek());
System.out.println(myStack.peek());
// 6. 彈出棧頂元素
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
public static void main(String[] args) {
Test test = new Test();
test.myStack();
}
}
測試結果
棧是否爲空:true
棧是否滿:false
10
10
10
9