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

数据结构(Java实现)-栈和队列


栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。
先进后出
在这里插入图片描述


在这里插入图片描述


栈的使用
在这里插入图片描述

在这里插入图片描述


栈的模拟实现
在这里插入图片描述

在这里插入图片描述
上述的主要代码

public class MyStack {private  int[] elem;private int usedSize;public MyStack() {this.elem = new int[5];}@Overridepublic String toString() {return "MyStack{" +"elem=" + Arrays.toString(elem) +", usedSize=" + usedSize +'}';}//压栈public void push(int val){if(isFull()){elem=Arrays.copyOf(elem,2*elem.length);}elem[usedSize++]=val;}public boolean isFull(){return this.usedSize==elem.length;}//出栈public int pop(){if(empty()){throw new StackEmptyException("栈内元素为空");}return elem[--usedSize];}public  boolean empty(){return usedSize==0;}//获取栈顶元素public int peek(){if(empty()){throw new StackEmptyException("栈内元素为空");}return elem[usedSize-1];}}

改变元素的序列
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


将递归转化为循环
比如:逆序打印链表
在这里插入图片描述
结果如下
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


队列的使用
Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口
在这里插入图片描述
在这里插入图片描述


队列模拟实现(利用双向链表)
先考虑一般情况,再考虑特殊情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


循环队列
环形队列通常使用数组实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意事项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下
在这里插入图片描述


双端队列 (Deque)
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。
栈和队列均可以使用该接口。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


用栈实现队列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

相关文章:

  • 毕业季如何做好IT技术面试
  • springcloud3 GateWay章节-Nacos+gateway(跨域,filter过滤等5
  • Nodejs+Typescript+Eslint+Prettier+Husky项目构建
  • 轻松正确使用代理IP
  • SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
  • lintcode 961 · 设计日志存储系统预【系统设计题 中等】
  • windows下Qt、MinGW、libmodbus源码方式的移植与使用
  • leetcode做题笔记104. 二叉树的最大深度
  • 【Luniux】解决Ubuntu外接显示器不显示的问题
  • 【C++初阶】模拟实现list
  • 三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课
  • flask中GET和POST的区别
  • 基于Spring Boot的游泳馆管理系统的设计与实现(Java+spring boot+MySQL)
  • git冲突处理(已commit但忘pull的情况)
  • 嵌入式设备应用开发(发现需求和提升价值)
  • Redis Replication
  • 软件研发CI/CD流水线图解
  • 代码随想录第五十九天
  • “yarn“、“npm“、“cnpm“和“pnpm“的区别
  • 批量将txt文件转化为excel文件
  • StringIndexOutOfBoundsException: String index out of range: 458
  • R语言主成分分析
  • 单片机学习-蜂鸣器如何发出声音
  • 利用敏捷开发工具实现敏捷项目管理的实践经验分享
  • 代码随想录训练营 贪心02
  • Linux安装NVM(简洁版)
  • vue 弹出框 引入另一个vue页面
  • 为Android做一个ShowModal窗口
  • 神经网络的工作原理
  • Pandas数据分析教程-数据清洗-字符串处理