隊(duì)列是一個先入先出的有序列表居砖,而棧和隊(duì)列相反,是個先入后出的有序列表驴娃。
棧的特點(diǎn)就是先進(jìn)后出奏候。
棧的最底端我們稱為棧底,這一端是不會變化的唇敞。而另一個變化隨著放入元素而變化的一端我們稱為棧頂蔗草。
- 首先我們創(chuàng)建一個棧類,用來實(shí)現(xiàn)對棧的各種操作
class Stack {
private int maxSize; // 棧的最大長度
private int[] stack; // 用數(shù)組來模擬棧
private int top = -1; // 這個表示棧頂
public Stack(int maxSize) {
this.maxSize = maxSize;
this.stack = new int[maxSize];
}
}
- 接著來分別寫兩個方法疆柔,分別來判斷棧是滿是空
// 判斷棧滿
public boolean isFull() {
return top == maxSize - 1;
}
// 判斷棧是否為空
public boolean isEmpty() {
return top == -1;
}
- 然后便是入棧和出棧
// 入棧
public void push(int value) {
if(isFull()) {
System.out.println("棧已經(jīng)滿了咒精!");
return;
}
top ++;
stack[top] = value;
}
// 出棧
public int pop() {
if (isEmpty()) {
throw new RuntimeException("棧已經(jīng)為空了!");
}
int temp = top;
top --;
return stack[temp];
}
- 再然后來寫一個遍歷棧的方法
// 遍歷棧
public void show() {
if(isEmpty()) {
System.out.println("棧已經(jīng)為空了!");
return;
}
for(int i = top; i >= 0; i --)
System.out.println(stack[i]);
}
- 最后來寫一個main()方法來測試一下這個棧
public class StackTest {
public static void main(String[] args) {
Stack stack = new Stack(3);
stack.push(1);
stack.push(2);
stack.push(3);
stack.show();
System.out.println("-----------------------");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}