栈Stack
栈也是一种线性数据结构
规定只能从栈顶添加元素,也只能从栈顶取出元素,他就像一个水杯结构,里面的元素就像是羽毛球
栈的具体实现
/**
* Stack()
* 创建一个空堆栈。
*
* empty()
* 测试此堆栈是否为空。
*
* peek()
* 查看此堆栈顶部的对象,而不从堆栈中删除它。
*
* pop()
* 删除此堆栈顶部的对象,并将该对象作为此函数的值返回。
*
* push(E item)
* 将项目推送到此堆栈的顶部。
*
* search(Object o)
* 返回一个对象在此堆栈上的基于1的位置。
*/
时间复杂度分析
讲解leetcode 【20. 有效的括号】
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Stack;
public class demo1 {
public boolean isValid(String s) {
if( s==null||s.length()%2!=0 || s.length()==0)
return false;
Stack<Character> stack = new Stack<>();//创建栈
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);//取出字符
if(c=='('|c=='['|c=='{'){
stack.push(c);
//判断是否为空,如果为空那么就是")}] 的情况,直接返回false"
}else if(stack.isEmpty()){
return false;
//一一对比,利用栈后进先出的特性
} else if(c==')' && stack.pop()!='('){
return false;
}else if(c==']' && stack.pop()!='['){
return false;
}else if(c=='}' && stack.pop()!='{'){
return false;
}
}
return stack.isEmpty();//如果里面还有值,那么返回false,例如“{()”
}
public static void main(String[] args) {
System.out.println(new demo1().isValid("){"));
}
}
队列(Queue)
队列也是一种线性数据结构
只能从一端(队尾)添加元素,从另一端(队首)取出元素,可以用数组实现。队列是一种先进先出的数据结构
队列的实现
/**
* add(E e)
* 将指定的元素插入到此队列中,如果可以立即执行此操作,而不会违反容量限制, true在成功后返回 IllegalStateException如果当前没有可用空间,则抛出IllegalStateException。
*
* element()
* 检索,但不删除,这个队列的头。
*
* offer(E e)
* 如果在不违反容量限制的情况下立即执行,则将指定的元素插入到此队列中。
*
* peek()
* 检索但不删除此队列的头,如果此队列为空,则返回 null 。
*
* poll()
* 检索并删除此队列的头,如果此队列为空,则返回 null 。
*
* remove()
* 检索并删除此队列的头。
*/