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

算法通关村第四关|青铜|自己实现栈

1.自己实现栈——基于数组

top 有的地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位,根据题目要求设计。

*这里将 top 设置为栈顶再往上的一个空单位。

import java.util.Arrays;
class Mystack<T> {private Object[]  stack;// 指向栈顶上的空位private int top = 0;Mystack() {stack = new Object[8];}// 判断是否为空public boolean isEmpty() {return top == 0;}// 返回栈顶元素public T peek() {T t = null;if (top > 0) {t = (T)stack[top - 1];}return t;}// 压栈public void push(T t) {// 栈基于数组实现,当数组填满时需要扩容// top+1匹配stack.length,代表数组的最后一位expandCapacity(top + 1);stack[top] = t;top++;}// 出栈public T pop() {T t = peek();if (top > 0) {stack[top - 1] = null;top--;}return t;}// 扩容public void expandCapacity(int size) {int len = stack.length;// size大于len,则本次push已经没有位置了,需要扩容if (size > len) {// 扩容 50%size = size * 3 / 2 + 1;stack = Arrays.copyOf(stack, size);}}
}

2.自己实现栈——基于链表

class ListStack<T> {class Node<T> {public T t;public Node next;}// 基于链表实现栈,需要一直对头结点进行操作public Node<T> head;// 构造函数,初始化头指针ListStack() {head = null;}// 压栈public void push(T t) {// 链表中不能放入空结点,要提前判断if (t == null) {throw new NullPointerException("参数不能为空");}if (head == null) {head = new Node<T>();head.t = t;head.next = null;} else {Node<T> temp = head;head = new Node<>();head.t = t;head.next = temp;}}// 出栈public T pop() {if (head == null) {return null;}T t = head.t;head = head.next;return t;}// 返回栈顶元素public T peek() {if (head == null) {return null;}T t = head.t;return t;}// 判空public boolean isEmpty() {if (head == null) {return true;} else {return false;}}
}

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ♥
算法通关村专栏:不易|算法通关村 ♥

http://www.lryc.cn/news/213804.html

相关文章:

  • Calcite 自定义优化器规则
  • 【flink】flink获取-D参数方式
  • NLP之多循环神经网络情感分析
  • 【AutoML】AutoKeras 的安装和环境配置(VSCode)
  • 树结构及其算法-用数组来实现二叉树
  • 知识图谱与大模型结合方法概述
  • ASO优化之如何制作Google Play的长短描述
  • Python-platform模块
  • Yolov5旋转框(斜框)检测自己的数据集,附带代码模型可以收敛
  • 嵌入式应用选择正确的系统设计方法:第三部分
  • pthread_attr_getstacksize 问题
  • anaconda常见语法
  • reactive与ref VCA
  • 小程序day01
  • redis主要支持的数据类型有哪些?—— 筑梦之路
  • 解决国际阿里云服务器挂载云盘的问题!!
  • 基于吉萨金字塔建造算法的无人机航迹规划-附代码
  • 高频SQL50题(基础版)-1
  • RecyclerView自定义LayoutManager从0到1实践
  • 【虹科干货】5个关于微服务的误解
  • 利用卷影拷贝服务攻击域控五大绝招
  • web3 在React dapp中全局管理web3当前登录用户/智能合约等信息
  • Golang硬件控制:将软件力量扩展到物理世界
  • Docker 查看Image镜像的Dockerfile方法
  • el-dialog中嵌套iframe之后拿不到iframe的id 的解决办法
  • 汇总公安局网站建设想法,QPQ盐浴氮化处理
  • 前度开发面试题
  • 如何保证缓存中都是热点数据?
  • 什么是Webpack?它的主要功能是什么?
  • 基于深度学习的人脸性别年龄识别 - 图像识别 opencv 计算机竞赛