当前位置: 首页 > news >正文

【数据结构与算法 | 基础篇】数组模拟栈

1. 前言

前文我们刚提及了如何用单向链表来模拟栈. 我们还可以用数组来模拟栈.使用栈顶指针top来进行栈顶的操作.

2. 数组模拟栈

(1). 栈接口

public interface stack<E> {//压栈boolean push(E value);//弹栈, 栈非空返回栈顶元素E pop();//返回栈顶元素, 但不弹栈E peek();//判断栈是否为空boolean isEmpty();//判断栈是否已满boolean isFull();
}

(2). 数组模拟栈

public class ArrayStack<E> implements stack<E>, Iterable<E>{//栈顶指针private int top;//数组模拟栈private E[] stack;public ArrayStack(int capacity) {stack = (E[]) new Object[capacity];}@Overridepublic boolean push(E value) {if(isFull()) {return false;}stack[top++] = value;return true;}@Overridepublic E pop() {if(isEmpty()) {return null;}return stack[--top];}@Overridepublic E peek() {if (isEmpty()) {return null;}return stack[top-1];}@Overridepublic boolean isEmpty() {return top < 0;}@Overridepublic boolean isFull() {return top == stack.length;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {@Overridepublic boolean hasNext() {return top > 0;}@Overridepublic E next() {return stack[--top];}};}
}

3. 单元测试

public class ArrayStackTest {@Testpublic void test1() {ArrayStack<Integer> stack = new ArrayStack<>(10);stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);stack.push(6);stack.push(7);for (Integer element : stack) {System.out.print(element + " ");}//7 6 5 4 3 2 1}@Testpublic void test2() {ArrayStack<Integer> stack = new ArrayStack<>(10);stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);stack.push(6);stack.push(7);System.out.println(stack.peek());//7System.out.println(stack.pop());//7System.out.println(stack.peek());//6}
}
http://www.lryc.cn/news/352692.html

相关文章:

  • css卡片横线100%宽度
  • 回溯大法总结
  • 基于Android Studio图书管理,图书借阅系统
  • SCSS 基本使用详解
  • 10.3.k8s的附加组件-图形化管理工具dashboard
  • 深入理解CPU缓存一致性
  • python获取安装路径盘符
  • CentOS 7.9安装NVIDIA P40显卡驱动、CUDA和cuDNN
  • SpringBoot多数据源启动出现循环依赖问题
  • 【一步一步了解Java系列】:何为数组,何为引用类型
  • 2024年5月份最新独角数卡使用USDT详细小白教程
  • 【idea】idea2024最新版本下载_安装_破解
  • 部署CNI网络组件+k8s多master集群部署+负载均衡
  • 一个和蔼可亲的Python库,用Gooey为你的程序添加GUI
  • java抽象类,接口,枚举练习题
  • 探索Python技巧:零基础学习缩进与逻辑关系
  • 【设计模式】JAVA Design Patterns——Callback(回调模式)
  • Pandas高效数据清洗与转换技巧指南【数据预处理】
  • kafka防止消息丢失配置
  • Socket CAN中ctrlmode有哪些?
  • find 几招在 Linux 中高效地查找目录
  • 【ELK日志收集过程】
  • 设计模式—23种设计模式重点 表格梳理
  • Vue学习穿梭框Transfer组件
  • Android 项目中自定义多个 RadioButton 并排一列选择效果实现
  • 解决win系统msvcp140.dll丢失的多种常用方法,亲测有效!
  • 使用keepalived实现mysql主从复制的自动切换
  • 数据库(4)——DDL数据库操作
  • C#基础一
  • UOS1060e分离ssh与sftp服务