数据结构学习(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();
    }
}

 

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