【Java--数据结构】栈:不仅仅是数据存储,它是编程的艺术

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

栈的方法介绍

入栈push

出栈pop和

瞄一眼peek

判空isEmpty和判满isFull

模拟实现栈

push入栈

pop出栈和peek

 测试

使用泛型实现栈

测试

使用链表实现栈(链式栈)


栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。

栈是一种 先进后出 的数据结构

栈的方法介绍

入栈push

Stack<Integer> stack=new Stack<>();//入栈stack.push(1);stack.push(2);stack.push(3);stack.push(4);

出栈pop和

pop出栈,会删除栈顶元素

        //出栈Integer x=stack.pop();System.out.println(x);

瞄一眼peek

peek(瞄一眼~)获取栈顶元素,不删除

//peekInteger y1=stack.peek();System.out.println(y1);Integer y2=stack.peek();System.out.println(y2);

判空isEmpty和判满isFull

       Stack<Integer> stack=new Stack<>();System.out.println(stack.isEmpty());System.out.println(stack.isFull());

模拟实现栈

下面是利用数组模拟实现一个栈,这种叫做顺序栈

定义一个数组来实现栈

usedSize表示

  1. 当前存放的数据个数
  2. 当前存放数据的下标

public class MyStack {public int[] elem;public int usedSize;public MyStack(){this.elem=new int[10];//初始设定为10个空间}
}

push入栈

public void push(int val){//判断是否满了if(isFull()){//扩容elem= Arrays.copyOf(elem,2*elem.length);}elem[usedSize]=val;usedSize++;}public boolean isFull(){return usedSize==elem.length;}

pop出栈和peek

public int pop(){if(empty()){return -1;}int oldVal=elem[usedSize-1];
//        elem[usedSize-1]=null;//如果是引用类型要置空usedSize--;return oldVal;}public int peek(){if (empty()) {return -1;}return elem[usedSize-1];}public boolean empty(){return usedSize==0;}

 测试

        MyStack myStack=new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);System.out.println(myStack.pop());System.out.println(myStack.peek());System.out.println(myStack.peek());

 

使用泛型实现栈

将int换成E类型

import java.util.Arrays;public class MyStack2<E> {public Object[] elem;public int usedSize;public MyStack2(){this.elem=new Object[10];//初始设定为10个空间}public void push(E val){//判断是否满了if(isFull()){//扩容elem= Arrays.copyOf(elem,2*elem.length);}elem[usedSize]=val;usedSize++;}public boolean isFull(){return usedSize==elem.length;}public E pop(){if(empty()){return null;}E oldVal=(E)elem[usedSize-1];
//        elem[usedSize-1]=null;//如果是引用类型要置空usedSize--;return oldVal;}public E peek(){if (empty()) {return null;}return (E)elem[usedSize-1];}public boolean empty(){return usedSize==0;}
}

测试

        MyStack2<Integer> myStack2=new MyStack2<>();myStack2.push(9);myStack2.push(8);myStack2.push(7);System.out.println(myStack2.pop());System.out.println(myStack2.peek());System.out.println(myStack2.peek());

使用链表实现栈(链式栈)

如果使用的是单链表,那么入栈和出栈最好使用链表的头部,这样的时间复杂度可以达到O(1),

若用链表的尾部,时间复杂度是O(N)

如果使用的是双向链表,那么入栈和出栈可以使用链表的头部或尾部,时间复杂度都是O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么减少pdf的MB,怎么减少pdf的大小

在数字化时代&#xff0c;pdf文件因其格式稳定、跨平台兼容性强等特点而广受欢迎。然而&#xff0c;随着内容的丰富&#xff0c;pdf文件的大小也日益增大&#xff0c;给文件传输和存储带来了不少困扰。本文将为你介绍多种减小pdf文件大小的方法&#xff0c;帮助你轻松应对这一问…

跳表的简单学习

跳表&#xff08;SkipList&#xff09;学习 1. 什么是跳表&#xff1f; 基于“空间换时间”思想&#xff0c;通过给链表建立索引&#xff0c;使得链表能够实现二分查找。 跳表是可以实现二分查找的有序链表。 2. 从单链表到跳表 对于一般的单链表&#xff0c;在其中进行查…

c语言指针超详解——入门篇

文章目录 前言1. 内存与地址内存编址 2. 指针变量和地址取地址操作符 &指针变量和解引用操作符 *指针变量解引用操作符指针变量的大小 3. 指针变量类型的意义指针的解引用指针-整数void* 指针 4. const 修饰指针const 修饰指针指向的变量const 修饰指针变量 5. 指针运算指针…

本地部署,AnimeGANv3: 将现实世界照片转化为动漫风格

目录 引言 技术背景 架构与原理 实验结果与分析 应用实例 本地部署 运行结果 Photo to Hayao Style Photo to Shinkai Style more suprise 支持多种风格 结论 参考文献 GitHub - TachibanaYoshino/AnimeGANv3: Use AnimeGANv3 to make your own animation works, …

智驭数据:深剖朴素贝叶斯算法及其实战疆域拓展

在浩瀚的数据海洋中&#xff0c;机器学习如同一艘智能航船&#xff0c;引领我们探索未知的知识岛屿。而在这艘船的诸多算法装备中&#xff0c;朴素贝叶斯&#xff08;Naive Bayes&#xff09;算法以其简洁高效、逻辑清晰的特点&#xff0c;成为了处理分类问题的一把利器。本文将…

软件测试——web单功能测试

工作职责&#xff1a; 1.负责产品系统测试&#xff0c;包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写&#xff0c;包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求&#xff1a; 1.熟练…

集成excel工具:自定义导入回调监听器、自定义类型转换器、web中的读

文章目录 I 封装导入导出1.1 定义工具类1.2 自定义读回调监听器: 回调业务层处理导入数据1.3 定义文件导入上下文1.4 定义回调协议II 自定义转换器2.1 自定义枚举转换器2.2 日期转换器2.3 时间、日期、月份之间的互转2.4 LongConverterIII web中的读3.1 使用默认回调监听器3.2…

JavaSE——集合框架二(4/6)-Map集合的遍历方式(键找值,键值对,Lambda)、Map集合案例(需求与分析,问题解决)

目录 Map集合的遍历方式 键找值 键值对 Lambda Map集合案例 需求与分析 问题解决 Map集合的遍历方式 键找值 先获取Map集合全部的键&#xff0c;再通过遍历键来找值。 键值对 把“键值对”看成一个整体进行遍历&#xff08;较为复杂&#xff09; Lambda JDK 1.8 开…

构建GitLab代码私有仓库

构建代码私有仓库 公司代码仓库一般都放在git上&#xff0c;但为了安全一般都不会放在开放的git上&#xff0c;都会搭建自己的仓库&#xff0c;今天就记录一下git搭建的过程。以下安装过程以centos7为例&#xff1a; 步骤一&#xff1a;安装并配置依赖项&#xff0c;同时打开ht…

iPhone 16 Pro系列将标配潜望镜头:已开始生产,支持5倍变焦

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7月6日消息&#xff0c;据DigiTimes最新报道&#xff0c;苹果将在iPhone 16 Pro中引入iPhone 15 Pro Max同款5倍光学变焦四棱镜潜望镜头。 报道称&#xff0c;目前苹果已经将模组订单交至大立光电和玉…

带权重的随机选择算法

最终的结果是left的索引 代表大于等于target的最小索引&#xff0c; 用左边界的二分搜索原因是&#xff0c;如果没有目标值&#xff0c;left大于或者等于target class Solution {private int[] preSum;private Random randnew Random();public Solution(int[] w) {//写前缀和…

OpenGL笔记九之彩色三角形与重心插值算法

OpenGL笔记九之彩色三角形与重心插值算法 —— 2024-07-07 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记九之彩色三角形与重心插值算法1.运行3.main.cpp 1.运行 3.main.cpp 代码 #include <iostream>#define DEBUG//注意&#xff1a;glad…

推荐一款uniapp拖动验证码插件

插件地址&#xff1a;易盾验证码 - DCloud 插件市场 具体使用方式访问插件地址自行获取

2024.7.9.小组汇报postman分享会

文章目录 一、前言&#xff08;零&#xff09;安装&#xff08;一&#xff09;界面导航说明&#xff08;二&#xff09;发送第一个请求 二、基本功能&#xff08;一&#xff09;常见类型的接口请求(常见的接口有如下四种类型&#xff1a;1.查询参数的接口请求&#xff08;1&…

Java02--基础概念

一、注释 注释是在程序指定位置添加的说明性信息 简单理解&#xff0c;就是对代码的一种解释 1.单行注释 格式: //注释信息 2.多行注释 格式: /*注释信息*/ 3.文档注释 格式: /**注释信息*/ 注释使用的细节: 注释内容不会参与编译和运…

Linux 命令 —— top命令(查看进程资源占用)

文章目录 top 命令显示信息介绍top 命令使用 top 命令显示信息介绍 top 命令是 Linux/Unix 系统中常用的进程监控工具&#xff0c;可以实时动态显示系统中各个进程的资源占用情况&#xff0c;包括CPU、内存等。 进入 linux 系统&#xff0c;直接输入 top&#xff0c;回车&…

51单片机STC89C52RC——18.1 HC-SR04超声波测距

目的/效果 独立按键K1按下后开始测距&#xff0c;LCD显示距离&#xff08;mm&#xff09; 一&#xff0c;STC单片机模块 二&#xff0c;HC-SR04 超声波测距 2.1 HC-SR04 简介 HC-SR04超声波测距模块提供2cm~400cm的测距功能&#xff0c;精度达3mm。 2.2 时序 以上时序图表明…

HCIA学习笔记(6)-ACL+NAT

ACL&#xff1a;访问控制列表 访问控制-------在路由器的入或者出接口上&#xff0c;匹配流量&#xff0c;之后产生动作-----只有允许或拒绝 定义感兴趣流量------帮助其他策略去抓流量 匹配规则&#xff1a;至上而下&#xff0c;逐一匹配&#xff0c;上条匹配按照上条执行&…

QTableView仿Excel表头排序和筛选

一.效果 Excel的排序和筛选弹窗如下所示 功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选,效果如下所示。 从效果图中可以看出,表头Section中的按钮有下列六种状态 enum Butt…

算法的时间复杂度和空间复杂度-例题

一、消失的数字 . - 力扣&#xff08;LeetCode&#xff09; 本题要求的时间复杂度是O(n) &#xff0c;所以我们不能用循环嵌套&#xff1b; 解法一&#xff1a; int missingNumber(int* nums, int numsSize){int sum10;for(int i0;i<numsSize;i){sum1i;}int sum20;for(i…