1.棧的定義:
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照后進先出的原則存儲數據,先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。
2.java代碼實現棧
數組實現:
package test; public class stack { private int maxSize;// 棧的大小 private int top; private char[] arr; public stack(int size) { maxSize = size; top = -1; arr = new char[maxSize]; } public void push(char value) { // 壓入數據 arr[++top] = value; } public char pop() { // 彈出數據 return arr[top--]; } public char peek() { // 訪問棧頂元素 return arr[top]; } public boolean isFull() { // 棧是否滿了 return maxSize - 1 == top; } public boolean isEmpty() { // 棧是否為空 return top == -1; } }
利用棧實現字符串的倒敘輸出
package test; public class Reverse { String input; public Reverse(String input) { this.input = input; } public String doReverse() { stack s = new stack(input.length()); for (int i = 0; i < input.length(); i++) { s.push(input.charAt(i)); } String output = ""; while(!s.isEmpty()){ output += s.pop(); } return output; } }
測試:
@Test public void fun(){ Reverse r=new Reverse("人國中是我"); System.out.println(r.doReverse()); }
鏈式實現:
package test; import java.util.LinkedList; public class stack1 { private LinkedList<Object> a = new LinkedList<Object>(); public void push(Object o) { a.addFirst(o); } public Object pop() { return a.removeFirst(); } public Object peek() { return a.getFirst(); } public boolean empty() { return a.isEmpty(); } }