棧的定義
說起椓到牛可以先想象一下手槍的彈夾恋腕,最后一個(gè)填入的子彈,第一個(gè)射出去逆瑞,這就是一個(gè)典型的棧荠藤。
image.png
棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),它是限定僅在表尾進(jìn)行插入和刪除操作的線性表获高。
我們把允許插入和刪除的一端稱為棧頂哈肖,另一端稱為棧底,不含任何數(shù)據(jù)元素的棧稱為空棧念秧。
棧的插入操作淤井,叫做進(jìn)棧,也稱壓棧摊趾、入棧币狠。就像子彈填入彈夾。
棧的刪除操作砾层,叫做出棧漩绵,也有叫做彈棧。就像彈夾中的子彈出夾肛炮。
棧的使用場(chǎng)景
在Android中一個(gè)眾所周知的使用場(chǎng)景就是Activity任務(wù)棧止吐,每當(dāng)我們打一個(gè)Activity的時(shí)候就會(huì)往Activity棧中壓入一個(gè)Activity宝踪,每當(dāng)我們銷毀一個(gè)Activity的時(shí)候會(huì)從Activity的任務(wù)棧中彈出一個(gè)Activity。具體見下圖
image.png
兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
public class StackTest {
static Stack<Integer> s1 = new Stack<>();
static Stack<Integer> s2 = new Stack<>();
public void push(int node) {
s1.push(node);
}
public int pop() throws Exception {
if (s2.size() <= 0) {
while (s1.size() > 0) {
s2.push(s1.pop());
}
}
if (s2.isEmpty()) {
throw new Exception("stack is empty!");
}
return s2.pop();
}
public static void main(String[] args) {
StackTest stackTest = new StackTest();
stackTest.push(1);
stackTest.push(2);
stackTest.push(3);
for (Integer integer : s1) {
System.out.println(integer);
}
try {
System.out.println(stackTest.pop()+"");
stackTest.push(4);
System.out.println(stackTest.pop()+"");
stackTest.push(5);
System.out.println(stackTest.pop()+"");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}