java中的栈(利用数组实现栈)

常见的数据结构:https://blog.csdn.net/weixin_43304253/article/details/119764275

栈的介绍

  • 1、栈的英文名(Stack)
  • 2、先入后出的有序列表
  • 3、限制元素的插入和删除只能在线性表的同一段进行的特殊线性表。允许插入和删除的一段称为栈顶(top),另外固定的一段为栈底(bottom)
  • 4、最先放入的元素在栈底,最后放入的元素在栈顶。最后放入的元素最先被删除,最先放入的最后被删除。

入栈操作,当有数据加入到栈时,top++;stack[top]=data;
出栈操作,int val=stack[top];top–;return val;

举例

设置top的初始值为-1。如果设置为整数或者0,则默认栈有大小。此处使用数组实现栈,数组中的索引0代表第一个元素,如果默认为0,则默认栈的大小为1(数组的长度为1)。栈的大小是在构造函数初始化动态设置大小。

package com.zheng.demo4;

public class MyStack {
public static void main(String[] args) {
Stack1 stack = new Stack1(6);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("遍历栈:");
stack.list(); System.out.println("取出栈顶元素");
System.out.println(stack.pop());
}
} //定义栈
class Stack1 {
private int maxSize;//定义栈的大小
private int top = -1;//栈顶
private int[] stack; //构造器初始化一个栈
public Stack1(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize]; } //判断栈是否满
public boolean isFull() {
return top == maxSize - 1;
} //p判断栈空
public boolean isEmpty() {
return top == -1;
} //入栈
public void push(int data) {
//先判断栈是否满
if (!isFull()) {
top++;
stack[top] = data; } else {
System.out.println("栈满");
}
} //出栈
public int pop() {
//先判断栈是否为空
if (isFull()) {
//抛出异常
throw new RuntimeException("栈空"); }
int val = stack[top];
top--; return val;
} //遍历栈
public void list() {
for (int i = top; i >= 0; i--) {
System.out.printf("stack[%d]=%d\n", i, stack[i]); }
} }

在这里插入图片描述

最新文章

  1. Android面试经验 -- 乐视
  2. 使用LinqToExcel读取Excel
  3. java中一些定时器的使用
  4. java web第一个Servlet程序
  5. UVaLive4043 UVa1411 Ants 巨人与鬼
  6. bash shell学习-shell基础 (笔记)
  7. iOS安全攻防(二十三):Objective-C代码混淆
  8. Hangfire在ASP.NET CORE中的简单实现
  9. 关于ZK框架的onScroll事件的问题
  10. Python神器 Jupyter Notebook
  11. CF1097G Vladislav and a Great Legend
  12. Web API中的消息处理程序(Message Handler)
  13. java jvm和android DVM区别
  14. json-lib转化java对象,是否转化为null的属性
  15. == 和 equal 区别
  16. Windows服务安装、卸载、启动和关闭的管理器
  17. EasyUI tree reload时更改参数的问题。
  18. java web程序 登陆验证页面 4个页面人性化设置
  19. thinkphp Ajax表单提交
  20. 二. Jmeter--参数化

热门文章

  1. 解决国内不能访问github的问题
  2. 微服务性能分析|Pyroscope 在 Rainbond 上的实践分享
  3. Linux 基于源码安装 Redis
  4. 拥挤的奶牛题解---队列优化DP---DD(XYX)​​​​​​​的博客
  5. C#基础_XML文件读写
  6. 【HTML】学习路径1-网页基本结构-标签基本语法
  7. Android下的Drawable使用
  8. ubuntu 16.04 搭建docker
  9. Redis6.0.6的三大内存过期策略和八大淘汰策略
  10. .Net下的高效分页