dls 深度受限搜索java_JAVA深入学习(栈和队列)之栈
序言
在前面几篇文章中我们分别讲的数据结构中的几种简单排序(JAVA数据结构和算法-简单排序之冒泡排序、 JAVA数据结构和算法-简单排序之选择排序 、JAVA数据结构和算法-简单排序之插入排序 )和对象排序的使用(数据结构和算法-简单排序之对象排序 )。
在之后近几篇的文章中,我们将要讲解集中不同的结构类型,分别是栈、队列、有序队列。在了解栈之前我们先了解一下之前数据存储结构与之后存储结构的区别。
1、程序员的工具
数组是前面已经介绍过的数据存储结构,和其他数据结构(链表、树)一样,都适用于数据库应用中做数据吉利。它常用于记录那些对应于现实世界的对象和活动的数据,如职员档案、目录、上午数据等。这些结构便于数据的访问:它们易于进行插入、删除和查找特定数据项的操作。
然而之后要讲解的数据结构和算法更多的是作为程序员的工具来运用。它们主要作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生命周期比那些数据库类型的结构要短得多。在程序操作执行期间它们才被创建,通常用它们去执行某项特殊的任务;当完成任务之后,它们就要被销毁掉。
2、受限的访问
在数组中,若知道数据项的下标,便可以立即访问该数据项;或者通过顺序搜索数据项,访问到数据中的各项数据。而在栈和队列等数据结构中,访问是受限的,即在特定时候只有一个数据项可以被读取或者被删除。
3、更加抽象
栈、队列和优先级队列是比数组和其他数据存储结构更为抽象的结构。主要通过接口对栈、队列和优先级队列进行定义,这些接口表明通过它们可以完成的操作,而它们的主要实现机制对用户来说是不可见的。
例如:栈的主要机制可以用数组来实现,也可以用链表来实现。优先级队列的内部实现可以用数组或一种特别的树-堆来实现。
栈
代码实现
/** * Created by Bruce on 2020/8/13 * 使用数组实现栈 **/public class Stack_01 { private int maxSize; private long[] stackArray; private int top; public Stack_01(int maxSize) { this.maxSize = maxSize; stackArray = new long[maxSize]; top = -1; } /** * 是否为空 * @return */ public boolean isEmpty(){ return top == -1;//栈顶指针为默认值-1,则代表为空 } /** * 栈是否已满 * @return */ public boolean isFull(){ return top == maxSize - 1;//栈顶指针为限制数量-1 } /** * 向栈中压入元素 * @param value * @return */ public boolean push(long value){ if (isFull()){//已满压入失败 return false;//实际使用中-可抛出异常处理 } stackArray[++top] = value;//栈顶压入-top是在插入数据项之前递增的 return true; } /** * 弹栈 * @return */ public long pop(){ if(isEmpty()){//栈为空 return -1;//实际使用中-可抛出异常处理 } return stackArray[top--];//先返回再递减 } /** * 查看栈顶元素 * @return */ public long peek(){ if(isEmpty()){//栈为空返回-1; return -1L;//实际使用中-可抛出异常处理 } return stackArray[top]; } public static void main(String[] args) { int maxSize = 10; Stack_01 stack = new Stack_01(maxSize); System.out.println("入栈:"); for(int i = 0; i
数据打印:
入栈:
0 10 20 30 40 50 60 70 80 90
弹栈:
90 80 70 60 50 40 30 20 10 0
解析
本文摘要自《Java数据结构和算法(第二版)》
dls 深度受限搜索java_JAVA深入学习(栈和队列)之栈相关推荐
- DLS 深度受限搜索 狼羊 过河 问题 python 实现
深度受限搜索(DLS)简单地说就是深度有限搜索(DFS)+深度限制(limit) DLS伪代码 实例:狼羊 过河 问题 3只羊和3头狼在河岸A,想要过河抵达河岸B.它们只有一艘船并且船上必须有1-2只 ...
- 八、【栈和队列】栈的应用
栈的应用 栈具有先进后出的特点,这个特点在解决某些问题时是很有效的.本节我们来看几个栈的常见应用以及栈结构适合解决的问题类型. 1 数制转换 我们日常生活中用的是十进制,而计算机中绝大多数时候是二进制 ...
- 数据结构之栈和队列以及如何封装栈和队列,栈和队列的实例(进制转换和击鼓传花)
什么是数据结构? 不同的书对数据结构有不同的定义,例如: "数据结构是数据对象,以及存在于该对象的实例和 组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出." ...
- 3.1栈和队列——顺序栈基本操作的实现
注意:以下内容均省略思路,只有代码.此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正.建议,末学将感激不尽! 目录 1.前言 2. 栈的特点(计算机二级考试中常考的知识点) 3. 栈的应用 ...
- JavaSE(二十一)——栈和队列、栈和堆
文章目录 1. 栈和队列 1.1 定义 1.2 区别 1.3 常见笔试题 2. 栈和堆 2.1 栈内存 2.2 堆内存 2.3 区别 1. 栈和队列 1.1 定义 栈(Stack):是限定能在表的一端 ...
- python 栈和队列_python 栈和队列的基本实现
python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...
- c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- 栈和队列之栈的定义和实现
栈的定义与实现 栈的定义:栈是限定在表尾进行插入或删除操作的线性表. 栈是一种特殊的线性表,栈只允许在线性表的一端进行操作. 1.栈顶(Top):允许操作的一端: 2.栈底(Bottom):不允许操作 ...
- java栈和队列_栈和队列的面试题Java
栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
最新文章
- CSS3支持IE6, 7, and 8的边框属性
- 经常下载的朋友注意了,教你怎样硬盘零伤害(从论坛上拷下来收藏的)
- (十二)算法设计思想之“分而治之”
- 只有3%的猿能完全看懂的高端漫画
- 中南大学计算机网.doc,中南大学计算机网络习题2014-2.doc
- spring 自动扫包代码放置的位置问题
- 最大一笔收购,Pokémon Go开发商Niantic收购AR开发平台8th Wall
- ubuntu 串口调试工具推荐_Qt开源作品3-串口调试助手
- linux查看服务_Linux服务下通过指令查看JVM(非原创侵删)
- 银行卡数据API接口有哪些?
- PKU2506Tiling
- 宏转录组方法_土壤宏转录组RNA的提取方法评价
- ElasticSearch 2.4.X实现中文拼音排序
- 《操作系统原理》 记录 (41)
- HTML5七夕情人节表白网页制作 (蓝色主题-樱花雨3D相册)HTML+CSS+JavaScript
- 课设系列:51单片机制作智能时钟闹钟
- NUMECA/FineTurbo计算中自动调用CFview实时数据处理
- SQL Server 2008服务器安装设置向导
- PMP项目管理中的重要角色
- SHEEL-远程调用执行命令模板