棧又稱堆棧,它是運算受限的線性表,其限制是僅容許在表的一段進行插入和刪除操做,不容許在其餘任何位置進行插入、刪除等操做,表中進行插入、刪除操做的一端稱爲棧頂,棧頂保存的元素稱爲棧頂元素,表的另外一端稱爲棧底。java
方法一:數組實現的棧,能存儲任意類型的數據import java.lang.reflect.Array;
//數組實現的棧,能存儲任意類型的數據
public class Stacktest<T>{
private static final int SIZE = 12;
private T[] Arrays;
private int count;
public Stacktest(Class<T> type){
this(type,SIZE);
}
// 不能直接使用Arrays = new T[SIZE];
public Stacktest(Class<T> type,int size){
Arrays =(T[]) Array.newInstance(type,size);
count =0;
}
// 將t添加到棧中
public void push(T t){
Arrays[count++] = t;
}
// 返回"棧頂元素值"
public T peek(){
return Arrays[count-1];
}
// 返回"棧頂元素值",並刪除"棧頂元素"
public T pop(){
T ret = Arrays[count-1];
count--;
return ret;
}
// 返回"棧"的大小
public int size(){
return count;
}
// 返回"棧"是否爲空
public boolean isEmpty() {
return size()==0;
}
// 打印"棧"
public void PrintArrayStack() {
if (isEmpty()) {
System.out.printf("stack is Empty\n");
}
System.out.printf("size()=%d\n", size());
int i=size()-1;
while (i>=0) {
System.out.println(Arrays[i]);
i--;
}
}
public static void main(String[] args) {
String string;
// 將10, 20, 30 依次推入棧中
Stacktest<String> stack = new Stacktest<String>(String.class);
stack.push("10");
stack.push("20");
stack.push("30");
// 將"棧頂元素"賦值給stack,並刪除"棧頂元素"
string = stack.pop();
System.out.println("stack="+string);
// 只將"棧頂"賦值給stack,不刪除該元素.
string = stack.peek();
System.out.println("stack="+string);
stack.push("30");
stack.PrintArrayStack(); // 打印棧
}
}
複製代碼
方法二:Java的 Collection集合 中自帶的"棧"(stack)的示例
import java.util.Stack;
public class Test {
public static void main(String[] args) {
int num=0;
// 將10, 20, 30 依次推入棧中
Stack<Integer> test = new Stack<Integer>();
test.push(10);
test.push(20);
test.push(30);
// 將"棧頂元素"賦值給num,並刪除"棧頂元素"
num = test.pop();
// 只將"棧頂"賦值給num,不刪除該元素.
num = (int)test.peek();
test.push(30);
while (!test.empty()) {
num = (int)test.pop();
System.out.printf("num=%d\n",num);
}
}
}
複製代碼