dls 深度受限搜索java_JAVA深入学习(栈和队列)之栈

序言

在前面几篇文章中我们分别讲的数据结构中的几种简单排序(JAVA数据结构和算法-简单排序之冒泡排序、 JAVA数据结构和算法-简单排序之选择排序 、JAVA数据结构和算法-简单排序之插入排序 )和对象排序的使用(数据结构和算法-简单排序之对象排序 )。

在之后近几篇的文章中,我们将要讲解集中不同的结构类型,分别是栈、队列、有序队列。在了解栈之前我们先了解一下之前数据存储结构与之后存储结构的区别。

937ff546724a6c89e388aa9cc0aa0d39.png

1、程序员的工具

数组是前面已经介绍过的数据存储结构,和其他数据结构(链表、树)一样,都适用于数据库应用中做数据吉利。它常用于记录那些对应于现实世界的对象和活动的数据,如职员档案、目录、上午数据等。这些结构便于数据的访问:它们易于进行插入、删除和查找特定数据项的操作。

然而之后要讲解的数据结构和算法更多的是作为程序员的工具来运用。它们主要作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生命周期比那些数据库类型的结构要短得多。在程序操作执行期间它们才被创建,通常用它们去执行某项特殊的任务;当完成任务之后,它们就要被销毁掉。

2、受限的访问

在数组中,若知道数据项的下标,便可以立即访问该数据项;或者通过顺序搜索数据项,访问到数据中的各项数据。而在栈和队列等数据结构中,访问是受限的,即在特定时候只有一个数据项可以被读取或者被删除。

3、更加抽象

栈、队列和优先级队列是比数组和其他数据存储结构更为抽象的结构。主要通过接口对栈、队列和优先级队列进行定义,这些接口表明通过它们可以完成的操作,而它们的主要实现机制对用户来说是不可见的。

例如:栈的主要机制可以用数组来实现,也可以用链表来实现。优先级队列的内部实现可以用数组或一种特别的树-堆来实现。

08f10b1dce5ecc3f9052be527cfd7ae5.png

a087b6414d0d41a0997175e35f8e9e58.png
10c2b33f7812fef38d64bbaf20a54819.png
2f14af5184f845047997a2d0a0684684.png
d9f625ded57e8662ab1014f0ffae47c9.png

代码实现

/** * 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

解析

30e3d01faf26279160b3a42f594fd24d.png
3796a0646bb53ffa2f103fce80b8f1d5.png
499aa4cfc8893b3f6ce2bf9cde02370c.png
b2af03ed413604d590e061a29afe2fba.png

本文摘要自《Java数据结构和算法(第二版)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值