首页 > 编程语言 >4.1 栈及其Java实现

4.1 栈及其Java实现

时间:2022-10-02 23:24:04浏览次数:84  
标签:4.1 定义 数据 及其 元素 栈顶 Java data top

直接看代码(分析)
(1)定义栈的数据结构

package hello.java.data.datastructure;
  /**
  * 基于数组实现的顺序栈
  * param<E>
  */
  public class Static<E>{
    private Object[] data = null;
    private int maxSize = 0;   // 栈的容量
    private int top = -1;    // 栈顶的指针
    //构造函数:根据指定的size初始栈
    Stack(){
      this(10);  //默认的大小为10
    }
    Stack(int initialSize){
      if(initialSize >= 0){
        this.maxSize = initalSize;
        data = new Object[initalSize];
        top -= -1;
      } else {
        throw new RuntimeException("初始化大小不能小于0:"+initialSize);
      }
    }
}

以上代码定义了一个Stack类,用来存储栈的数据结构;定义了一个数组data,用来存储栈中的数据;定义了maxSize,表示栈的最大容量;定义了top,表示栈顶数据的指针;定义了两个栈
的构造函数,在构造函数没有参数时默认构造一个大小为10的栈.
(2)数据入栈,向栈顶压入一个数据:

//进栈:第一个元素top=0
public boolean push(E e){
    if(top == maxSize - 1){
      throw new RuntimeException("栈以满,无法将元素入栈!");
    } else {
      data[++top] = e;
      return true;
    }
}

以上定义了方法push()来向栈中压入数据,在数据入栈前首先判断栈是否满了,具体的判断依据为栈顶元素的指针位置等于栈的最大容量。注意,这里使用maxSize -1是因为张顶元素的指针是从0开始
计算的。在栈有可用空间时,使用data[++top]=e在栈顶(top位置)上方压入一个元素将top加1.
(3)数据出栈,从栈顶移除一个数据

//弹出张顶元素
public E pop(){
   if(top == -1){
      throw new RuntimeException("栈为空!");
   } else {
      return (E)data[top--];
   }
}

以上代码定义了方法pop()来从栈顶移除一个数据,移除前先判断暂定是否有数据,如果有,则通过data[top--]将栈顶数据移除并将top减1.
(4)数据查询

//查询张顶元素但不移除
public E peek(){
   if(top == -1){
    throw new RuntimeException("栈为空!");
   } else {
     return (E)data[top];
   }
}

以上代码定义了方法peek()来取出栈顶的数据,在取出栈顶的数据前先判断栈顶的元素是否存在,如果存在,则直接返回栈顶元素(注意:这里没有对栈顶的元素进行删除)
否则抛出异常。

标签:4.1,定义,数据,及其,元素,栈顶,Java,data,top
From: https://www.cnblogs.com/Where-am-i/p/16749740.html

相关文章

  • Java_Lamda表达式
    Lamda表达式λ希腊字母表中排序第十一位的字母,英文为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念(params)->expression[表达式](params)->statement......
  • 使用JAVA代码实现POST发送application/x-www-form-urlencoded请求
    前言在实际开发过程中,我们经常是使用的POST发送application/json;charset=utf-8格式请求,但是有时候接口会设计成application/x-www-form-urlencoded,这就需要我们随机应变,......
  • 归并排序Java
    归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。其思想为:分解:分解待排序的n个元素的序列成各具n/2个元......
  • 力扣532(java)-数组中的 k-diff 数对(中等)
    题目:给你一个整数数组 nums和一个整数 k,请你在数组中找出不同的 k-diff数对,并返回不同的k-diff数对的数目。k-diff 数对定义为一个整数对(nums[i],nums[j])......
  • Java遍历文件夹
    Java遍历文件夹简单写了一个打印目录下所有文件以及文件夹的代码,类比于树的遍历,写了深度优先和广度优先的遍历。并且还写了个JDK1.7接口提供的的版本。深度广度遍历都用......
  • 9月30Java类与对象中动手动脑
    类与对象定义了一组大体相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性对象则是类的具体化,是类的实例。类通过派生类可以有子类,同样也可以有父类,形......
  • java学习之:类和对象、语句块、方法、递归结构!
    语句块和方法语句块语句块确定了局部变量的作用域。语句块嵌套,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用语句块外的变量,语句块中定义的变量作用域只限于语句......
  • javascript>=和<=
    一个条件都不满足为false,至少满足一个条件为truevara=10console.log(a>10);//false;console.log(a<10);//false;console.log(a==10);//trueconsole.log(a>=10);//true1......
  • 【Java】01基础-05 方法
    1.方法概述1.1方法的概念方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不......
  • 【Java】01基础-04数组
    1.数组1.1数组介绍数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组的定义格式1.2.1第一种格式数据类型[]数组名示例:int[]arr;double[]......