java实现入栈push和出栈pop过程

 更新时间:2024年12月17日 09:07:08   作者:Sshm_666  
文章详细介绍了栈的概念、特点以及如何使用数组和链表实现栈,通过入栈(push)和出栈(pop)操作,展示了栈的数据处理过程,并提供了具体的代码实现

java实现入栈push和出栈pop

什么叫栈

凡是满足数据先进后出的一种数据结构都叫做栈。

特点

先进后出,后进先出。

数据一般存储在两种数据结构中:1.数组、2.链表

实现入栈出栈可以用链表也可以用数组,数组是最简单的一种方法,我们用数组来实现:

栈的就像杯子一样,模型如下图:

那么我们往栈中放数据时入栈(push)就可以跟数组添加数据一样,假如我们放入数组顺序依次为3,5,7,9,那它在栈中的表现形式如下图,先进入的在栈底,最后进入的在栈顶,当然我们定义的数组会有长度限制,在到达栈顶时我们需要考虑给他扩容

那出栈时我们需要从栈顶开始输出值的大小,再出栈时就要输出栈顶的下一个值,即9出栈后下一个出栈的就是7,如下图:

那我们是需要定义一个指针index,当入栈时我们让index在数组里index++,出栈时,index指向的是栈顶元素上方,所以我们要先输出栈顶元素就要使index-1,再让index--;让下一个元素成为栈顶,如下图:

代码如下

定义一个栈stack类:

public class Stack {
    //定义私有数组只能本类方法可以访问
	private int[] arr=new int[10];
     //定义指针index,来指向栈顶元素上方
	private int index;
    //入栈方法,通过传参来添加元素
	public void push(int val) {
        //考虑扩容,如果数组长度不够就先进行扩充
		if(index==arr.length) {
			int[] brr=new int[arr.length*2];
			for(int i=0;i<arr.length;i++) {
				brr[i]=arr[i];
			}
			arr=brr;
		}
        //index++是先赋值后加一
		arr[index++]=val;
	}
    //出栈方法
	public void pop() {
        //考虑到达栈底时程序的完整性,防止越界
		if(index==0) {
			System.out.println("已经到达栈底");
			return;
		}
        //打印出栈顶元素,--index是先减一再赋值
		System.out.println(arr[--index]);
		
	}
}

通过测试类来测试结果:

public class Test {
	public static void main(String[] args) {
		Stack stack=new Stack();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		stack.push(4);
		stack.push(5);
		stack.push(6);
		stack.push(7);
		stack.push(8);
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
		stack.pop();
        }
}

结果如下图:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现八种排序算法详细代码举例

    Java实现八种排序算法详细代码举例

    排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这篇文章主要介绍了Java实现八种排序算法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • java编程之递归算法总结

    java编程之递归算法总结

    这篇文章主要介绍了java编程之递归算法总结,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 本地编译打包项目部署到服务器并且启动方式

    本地编译打包项目部署到服务器并且启动方式

    这篇文章主要介绍了本地编译打包项目部署到服务器并且启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java深入学习图形用户界面GUI之事件处理

    Java深入学习图形用户界面GUI之事件处理

    这篇文章主要介绍了基于Java GUI 事件处理方式,一个图形界面制作完成了,在程序开发中只是完成了起步的工作。要想让一个组件都发挥自己的作用.就必须对所有的组件进行事件处理
    2022-05-05
  • 教你使用java将excel数据导入MySQL

    教你使用java将excel数据导入MySQL

    今天教大家如何使用Java将excel数据导入MySQL,文中有非常详细的代码示例,对正在学习java的小伙伴呢很有帮助,需要的朋友可以参考下
    2021-05-05
  • SpringCloud LoadBalancer自定义负载均衡器使用解析

    SpringCloud LoadBalancer自定义负载均衡器使用解析

    LoadBalancerClient 是 SpringCloud 提供的一种负载均衡客户端,Ribbon 负载均衡组件内部也是集成了 LoadBalancerClient 来实现负载均衡,本文给大家深入解析 LoadBalancerClient 接口源码,感兴趣的朋友跟随小编一起看看吧
    2023-04-04
  • Java通过反射来打印类的方法实现

    Java通过反射来打印类的方法实现

    本文主要介绍了Java通过反射来打印类的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java泛型 <T> T、 T、<T>的用法小结

    Java泛型 <T> T、 T、<T>的用法小结

    T在Java泛型中,被称作类型变量, 有的方法返回值是<T> T,有的是T,区别在哪里,本文主要介绍了Java泛型 <T> T、 T、<T>的用法小结,具有一定的参考价值,感兴趣的可以了解下
    2023-12-12
  • SpringBoot整合数据库访问层的实战

    SpringBoot整合数据库访问层的实战

    本文主要介绍了SpringBoot整合数据库访问层的实战,主要包含JdbcTemplate和mybatis框架的整合应用,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03
  • Java简单计算器的实现

    Java简单计算器的实现

    这篇文章主要为大家详细介绍了Java简单计算器的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论