數據結構學習(Java版)——棧

棧:

棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱爲棧頂,相對地,把另一端稱爲棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。

百度百科的解釋。

第一次接觸的人肯定會看得頭大。我用大白話來解釋一下棧。

就跟手槍壓子彈,發射子彈一樣。

出棧
出棧
壓子彈
入棧

 

 

 

 

 

 

 

 

 

 

如上圖,子彈只能從彈夾上邊一次壓進去,同時也只能從彈夾上邊出來。最先進去的子彈,被壓在最底下。最後進去的子彈,在最上邊。射出時,最上邊(最後進去的)的先出去,最下邊的(最先進去的)後出來。

 

類似這種操作,放到計算機上,就是棧。

 

對一個數組,操作時,放元素,只放在最後,取元素,只取最後一個。就是棧。(運算受限的線性表)

 

棧的用處:

用電腦寫文檔或者文字的時候,就是把文字壓到棧裏邊(入棧),然後可以進行撤銷操作,(出棧)

Java棧:

聲明:

Stack<type> stack = new Stack<>();

方法摘要:

 

方法摘要
 boolean empty()
          測試堆棧是否爲空。
 E peek()
          查看堆棧頂部的對象,但不從堆棧中移除它。
 E pop()
          移除堆棧頂部的對象,並作爲此函數的值返回該對象。
 E push(E item)
          把項壓入堆棧頂部。
 int search(Object o)
          返回對象在堆棧中的位置,以 1 爲基數。

例題:

力扣-題號-20-https://leetcode-cn.com/problems/valid-parentheses/

20. 有效的括號
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true
示例 2:

輸入: "()[]{}"
輸出: true
示例 3:

輸入: "(]"
輸出: false
示例 4:

輸入: "([)]"
輸出: false
示例 5:

輸入: "{[]}"
輸出: true
class Solution {
    public boolean isValid(String s) {
		Stack<Character> st = new Stack<>();
		char c ;
		char a;
		for (int i = 0; i < s.length(); i++) {
			c = s.charAt(i);
			if (c == '(' || c == '[' || c == '{') st.push(c);
			else {
				if (st.isEmpty()) return false;
				a = st.pop();
				if((c == ')' && a != '(') ||(c == ']' && a != '[') ||(c == '}' && a != '{')) return false; 
			}
		}
		return st.isEmpty();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章