Java数据结构--顺序栈

一、简介

1.1 概念

栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。
表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。
由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表

顺序栈:由于栈是运输受限的线性表,除了操作不同外,线性表的存储结构对栈也是适用的。
利用顺序存储方式实现的栈称为顺序栈。

1.2 结构图

在这里插入图片描述

二、简单实现

public class InitStack{

    private int [] stack = null;      //存储元素

    private int top = 0;           //指示栈顶元素在顺序栈中的位置

    public InitStack(int max) {       //初始化自定义大小的顺序栈
        this.stack = new int[max];
    }
    
	/**
	* 清除栈
	*/
    public void clearStack() {
    	this.top = 0;          //直接令栈顶指针指向栈底即可
	}
	
	/**
	* 检查顺序栈是否为空
	*/
	public boolean stackEmpty() {
	    if(this.top == 0) {        //检测栈顶指针是否指向栈底即可
	        return true;
	    }else {
	        return false;
	    }
	}
	
	/**
	* 返回顺序栈中元素个数
	*/
	public int stackLength() {
		return this.top;        //栈顶指针的值即代表了元素个数
	}
	
	/**
	* 返回顺序栈的栈顶元素,不修改栈顶指针
	*/
	public int [] getTop() {
	    if (this.top == 0) {        //如果顺序栈为空,则返回空
	        return null;
	    }
	
	    int [] i = new int[1];
	    i[0] = stack[this.top - 1];    //获取栈顶元素
	
	    return i;
	}
	
	/**
	* 向顺序栈中压入元素
	*/
	public boolean push(int value) {
	    if(this.top == this.stack.length) {    //判断顺序栈是否已满
	        return false;
	    }
	
	    this.stack[this.top] = value;        //压入元素
	    this.top++;                  //栈顶指针加一
	    return true;
	}
	
	/**
	* 从顺序栈顶中弹出元素
	*/
   public int [] pop() {
	    if (this.top == 0) {      //判断顺序栈是否已空
	        return null;
	    }
	
	    int [] i = new int[1];
	    this.top--;            //栈顶指针减一
	    i[0] = stack[this.top];    //获取栈顶元素
	    return i;
	}

   /**
   * 从栈底到栈顶遍历顺序栈
   */
	public String stackTraverse() {            //通过输出顺序栈元素来表示遍历
	    String s = "";                    //存储要输出的元素
	
	    for (int i = 0; i < this.top; i++) {      //循环遍历
	        s += this.stack[i] + "、";
	    }
	
	    if(s.length() == 0) {               //如果未获取到元素,返回空字符串
	        return s;
	    }
	
	    return s.substring(0,s.length() - 1);     //除去最后一个顿号后返回
	}

}

热门文章

暂无图片
编程学习 ·

JAVA中的自定义异常

JAVA中的自定义异常SUN提供的内置的异常肯定是不够用的,在实际开发中我们需要自己自定义一些与业务相关的异常java中如何自定义异常: 第一步:编写一个类继承 Exception 或者 RuntimeException 设定为编译时异常就继承Exception 设定为运行时异常就继承RuntimeException 第二…
暂无图片
编程学习 ·

用Python读取pg数据库,准确统计每一张表的数据量,输出中英文表名和数据量

1 前言 在我们工作中,有时候老板关系我们手上到底有多少数据,每一张表中到底有多少数据量,整个库又有多少数据量?要给他一个准确的数据,给出一张详细清单。 在网上遇到的一种做法是使用navicat写SQL语句统计pg_class里面的reltuples这个列数据,但是发现这个数据有很大偏…
暂无图片
编程学习 ·

从入门到删库跑路的过程

数据库简介数据库的发展史萌芽阶段:文件系统使用磁盘文件来存储数据初级阶段:第一代数据库出现了网状模型、层次模型的数据库中级阶段:第二代数据库关系型数据库和结构化查询语言高级阶段:新一代数据库关系-对象 型数据库NoSQL非关系数据库:Not Only SQL 数据库管理系统 数…
暂无图片
编程学习 ·

Linux安全原理简介

Linux安全原理简介介绍在设置Linux计算机的所有阶段,安全性应是首要考虑之一。要在计算机上实施良好的安全策略,需要对Linux的基础知识以及所使用的某些应用程序和协议有充分的了解。Linux的安全性是一个非常重要的主题,并且有许多有关此主题的完整书籍。我不能在本教程中介…
暂无图片
编程学习 ·

几种常见的分布式事务解决方案对比

背景 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。 ACID 指数据库事务正确执行的四个基本要素: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabili…
暂无图片
中恒嘉业 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
郑州普通话 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
代理记账 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
cgfy ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
mfbz ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
珊珊日记 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…