栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构——栈和队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——栈和队列

文章目录
  • 前言
  • 栈和队列
  • 堆栈的应用
    • 进制转换
    • 括号匹配检测
  • 参考


前言

线性结构是最简单、最常用的数据结构之一。线性结构的特点是:在数据元素的有限集中,除第一个元素无直接前驱,最后一个元素无直接后续外,每个元素有且仅有一个直接前驱和一个直接后继元素。

从逻辑结构上来说,栈和队列是线性结构,但是与线性表不同的是它们所支持的基本操作是受到限制的。


栈和队列

栈又称堆栈,其限制是仅允许在表的一端(栈顶)进行插入和删除操作,不允许在其他位置进行插入、删除等操作,所以后进栈的元素必定先出栈(后进先出)。

栈的基本操作:

  • getSize():返回堆栈的大小,即数据元素的个数
  • isEmpty():判断堆栈是否为空
  • push(e):元素入栈
  • pop():栈顶元素出栈,并返回
  • peek():获取栈顶元素,但不出栈

队列,其限制是仅允许在表的一端(队尾rear)进行插入,而在表的另一端(队首front)删除,所以先进队的必然先离队(先进先出)。新元素入队后成为队尾元素,从队列中删除元素后,其后续元素成为新的队首元素。

队列的基本操作:

  • getSize():返回队列的大小,即数据元素的个数
  • isEmpty():判断队列是否为空
  • enqueue(e):元素入队
  • dequeue():栈顶元素出队,并返回
  • peek():获取队首元素,但不出队列
堆栈的应用 进制转换
public void baseConversion(int num,int target) {
		Stack s = new Stack();
		while(num>0) {
			s.push(num%target);
			num = num/target;
		}
		while(!s.isEmpty()) System.out.println(s.pop());
	}
括号匹配检测

假设表达式中包括三种符号:圆括号、方括号和花括号,并且它们可以任意相互嵌套,例如{{}}、[{()}]等为正确格式,而{[()])或({])为不正确的格式。

public static boolean bracketMatch(String str) {
		Stack st = new Stack();
		for(int i=0;i
			char c= str.charAt(i);
			//如果是左括号,则直接入栈,等待相匹配的同类右括号。
			switch(c)
			{
			case '{':
			case '[':
			case '(': st.push(c);break;
			//如果是右括号,而堆栈为空,说明没有括号匹配,属于非法情况;
			case '}':
				if(!st.isEmpty() && st.pop().charValue()=='{')
					break;
				else return false;
			case ')':
				if(!st.isEmpty() && st.pop().charValue()=='(')
					break;
				else return false;
			case ']':
				if(!st.isEmpty() && st.pop().charValue()=='[')
					break;
				else return false;
			}
			
		}
		//一直到字符读完,而堆栈不为空,则说明左括号没有得到匹配,属于非法情况
		if(st.isEmpty()) return true;
		else return false;
	}
参考

数据结构与算法(JAVA语言版)——周鹏
如有侵权,请联系作者更正

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号