栈和队列学习总结

本文详细介绍了栈和队列的特点与应用。栈遵循先进后出原则,常见应用包括括号匹配、撤销操作和系统调用。队列则遵循先进先出原则,常见于管道实现、数据溢写和网络库的IO buffer。文章还讨论了循环队列、可变长队列、栈与队列的异同、假溢出问题以及如何用栈和队列实现彼此。
摘要由CSDN通过智能技术生成

一、栈

1、特点及应用

      先进后出。(如果会和队列先进先出记混的话,就记场景吧:弹栈弹栈,就是把最上面的最新进来的弹出去;而队列就像我们火车站排队检票出站一样,谁排在前面谁就先出去。)

      应用的话,其实我们经常接触呀。比如Undo操作(就是撤销操作)就是使用的栈的思想,以及程序调用的系统栈。下面我们举一个经典的括号匹配的例子:

      题目要求:

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

       解题思路:第一想到的应该就是用栈来做。如果是  {   (  [   之中的,就直接压入栈,如果有出现了   )  }   ]   之间的,就开始匹配。先从栈顶的元素开始匹配,如果不同则直接返回false;如果相同则继续匹配,直到栈里ianshi空的。

       源码如下:

import java.util.Stack;

class Solution {
	public boolean isValid(String s) {
		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);
			} else {
				if (stack.isEmpty())
					return false;
				char top = stack.pop();
				if (c == ')' && top != '(')
					return false;
				if (c == '}' && top != '{')
					return false;
				if (c == ']' && top != '[')
					return false;

			}
		}

		return stack.isEmpty();

	}
}

二、队列

       先进先出。

1、循环队列

        循环队列是很常见的数据结构,在大学计算机课程上也会遇到,被应用到很多场景,比如管道的实现(固定的容量64K)、MapR

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值