对于栈和链表,数组之间关系的一些探索

先贴脸来个图
这是一个解析图,总体是个栈(stacks)细分有数组和链表【注意这儿的linkedlist可不是Java集合List中的linklist】
在这里插入图片描述
对于栈,如果我们想向栈中添加元素,或者想从中删除元素,都必须从一个地方开始:栈的顶部(Top)。这种从同一位置插入和删除的行为也叫后进后先(Last In, First Out,LIFO
图示
在这里插入图片描述
LIFO图例备份

栈的实现方式

一句话,栈用链表实现就是上面提到的linkedList。
链表有一个显著的特征,任何操作都在一个头节点上,这样一来复杂的就是O(1),这样得益于LIFO。
到这如果感觉啰嗦,可以跳到最后的实现,有完整简易Java代码的实现,现在gpt这么好用,其他语言的也可以拿到Java代码转置一下,变成自己喜欢的高级语言debugger
当然, 栈也开业用数组实现,但是数组数组是静态数据结构,比如我们在Java中生命一个数组甚至要声明出其可存储的数据类型

//int [一个数字预设存储空间] = ****
int[8] = ***;

虽然使用链表不用这样设置和声明,这样会让链表以后他可以一直装,这种时候就会遇到栈溢出 的问题,但是只要不是你的这个类型的数据彻底占用了你的电脑内存就不会发生,而且人家链表里面是多个数组根本不担心你过来的是什么,来了就往口袋里装(回到图一⬆️)。

栈操作

以增删为例
在这里插入图片描述
我们只能从栈的一端(顶部)添加和删除元素,无论使用哪种语言实现栈,几乎都会实现以下几个基本的操作:

push:用于将元素添加到栈顶
pop:用于从栈顶删除元素
top ( peek ):返回栈顶部的元素,但不会将其删除
isEmpty:检查栈是否为空
size:返回栈中的元素数量

栈的实现

伪代码示例及代码实现
一个函数(function_one),它定义了一些局部变量,然后将这些变量作为参数调用了函数function_two,function_two中做了类似的事情:定义了一些局部变量,然后将这些变量作为参数传递给另一个函数(function_three)。
在这里插入图片描述

使用Java

class Node {int data;Node next;Node(int data) {this.data = data;this.next = null;}
}//用链表实现栈
class LinkedStack {//始终指向栈顶节点(链表头结点)private Node top;private int size;public LinkedStack() {this.top = null;this.size = 0;}// 压入栈顶public void push(int data) {Node newNode = new Node(data);newNode.next = top;top = newNode;size++;}// 弹出栈顶public int pop() {if (isEmpty()) {throw new RuntimeException("Stack is empty. Cannot pop.");}int data = top.data;top = top.next;size--;return data;}// 获取栈顶元素public int top() {if (isEmpty()) {throw new RuntimeException("Stack is empty. Cannot retrieve top element.");}return top.data;}// 检查栈是否为空public boolean isEmpty() {return top == null;}// 获取栈的大小public int size() {return size;}// 打印栈public void printStack() {Node current = top;while (current != null) {System.out.print(current.data + " -> ");current = current.next;}System.out.println("null");}
}public class StackExample {public static void main(String[] args) {LinkedStack stack = new LinkedStack();// 压入栈顶stack.push(1);stack.push(2);stack.push(3);stack.printStack(); // 输出: 3 -> 2 -> 1 -> null// 获取栈顶元素System.out.println("Top element is: " + stack.top()); // 输出: 3// 弹出栈顶System.out.println("Popped element is: " + stack.pop()); // 输出: 3stack.printStack(); // 输出: 2 -> 1 -> null// 获取栈大小System.out.println("Stack size is: " + stack.size()); // 输出: 2// 检查栈是否为空System.out.println("Is stack empty? " + stack.isEmpty()); // 输出: false// 弹出所有元素stack.pop();stack.pop();stack.printStack(); // 输出: null// 检查栈是否为空System.out.println("Is stack empty? " + stack.isEmpty()); // 输出: true}
}

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

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

相关文章

阿里云DSW实例中安装并运行Neo4J

想尝试使用大模型对接Neo4J,在阿里云DSW实例中安装了Neo4J,却无法通过本地浏览器访问在DSW实例中运行的Neo4J。尝试了改neo4j.conf文件,以及添加专用网络的公共IP地址等方法,均没有成功。最后决定直接在服务器的命令行进行各种Cyp…

uniapp 页面字体乱码问题解决【已解决】

这个不是我们本身代码的问题,调整一下编译器就好了 打开编译器文件 2,然后以指定编码重新打开,选择utf-8就行了 非常简单 ,如果你选择了之后重新渲染页面还是乱码的话,你就把项目关掉,重新启动就OK了。。。

从零开始学习嵌入式----结构体struct和union习题回顾

一、通过结构体和自定义函数实现成绩从大到小的排序&#xff0c;要求在主函数内定义结构体数组。 #include <stdio.h> //定义一个结构体类型 typedef struct Student {int age;char name[32];float score; } STU; //定义一个函数实现成绩从小到大的排序 void fun(STU *p…

基于搜索二叉树的停车收费管理系统

系统效果&#xff1a;录入汽车信息 查看汽车信息 收费信息查看 查询车库车辆 代码展示&#xff1a; //SearchBinaryTree.h #pragma once #include<iostream> #include<string> #include<time.h> #include<Windows.h> using namespace std;template<…

百分点科技入选《2024中国数据要素产业图谱1.0版》

近日&#xff0c;数据猿与上海大数据联盟发布了《2024中国数据要素产业图谱1.0版》&#xff0c;百分点科技凭借领先的数据科学技术和深入的行业洞察力&#xff0c;入选数据管理/治理、数据分析与挖掘、应急管理三大领域。 在数据要素的发展关键期&#xff0c;数据作为生产要素持…

Hadoop中的YARN组件

文章目录 YARN 的主要功能YARN 的架构YARN 的工作流程YARN 的优势总结 YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Hadoop 生态系统中的一个关键组件&#xff0c;负责资源管理和作业调度。它是 Hadoop 2.x 及更高版本中的核心模块&#xff0c;旨在提高集群…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【26】【内网穿透】cpolar

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【27】【内网穿透】cpolar 内网穿透cpolar内网穿透联调配置练习—使用公网地址访问gulimall.com参考 内网穿透 正常的外网需要访问我们项目的流程是&#xff1a; 买服务器并且有公网固定…

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高&#xff0c;文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件&#xff0c;使其既能保持清晰&#xff0c;又能轻松分享&#xff1f;今天&#xff0c;给大家分享五种实用的视频压缩方法&#xff0c;快来…

简谈设计模式之适配器模式

适配器模式是结构型设计模式之一, 用于将一个类的接口转换成客户期望的另一个接口. 通过使用适配器模式, 原本由于接口不兼容而无法一起工作的类可以协同工作 适配器模式通常有两种实现方式 类适配器模式 (Class Adapter Pattern&#xff09;: 使用继承来实现适配器。**对象适…

安装adb和常用命令

下载ADB安装包 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 解压安装包 解压如上下载的安装包&#xff0c;然后复制adb.exe所在的文件地址 配置环境变量 我的电脑——>右键属性——>高级系统设置——>环境变量——>系统变量—…

stm32学习:(寄存器1)控制寄存器来让led亮

开启时钟&#xff0c;先查找到开启时钟的寄存器&#xff0c;然后通过该寄存器操作时钟的开启或关闭&#xff0c;要打开的是GPIOA的时钟 在芯片手册&#xff0c;找到RCC寄存器描述章节找到APB2外设时钟使能寄存器&#xff08;RCC_APB2ENR)&#xff0c;现在算RCC_APB2ENR这个寄存…

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

基于mcu固件反汇编逆向入门示例-stm32c8t6平台 本文目标&#xff1a;基于mcu固件反汇编逆向入门示例-stm32c8t6平台 按照本文的描述&#xff0c;应该可以在对应的硬件上通实验并举一反三。 先决条件&#xff1a;拥有C语言基础&#xff0c;集成的开发环境&#xff0c;比如&am…

ES6及ESNext规范

1、let 和 const 而let引入了块级作用域的概念, 创建setTimeout函数时&#xff0c;变量i在作用域内。对于循环的每个迭代&#xff0c;引用的i是i的不同实例。 暂时性死区&#xff1a;不允许变量提升 const就很简单了, 在let的基础上, 不可被修改 js 代码解读 for(var i0;i<…

《背包乱斗》为什么好玩 苹果电脑怎么玩《背包乱斗》游戏 mac怎么玩steam windows游戏

在当今竞争激烈的游戏市场中&#xff0c;《背包乱斗》以其独特的魅力在众多作品中脱颖而出&#xff0c;吸引了大量玩家的关注和喜爱。其创新的游戏机制和不断迭代的内容&#xff0c;加之出色的视觉效果和社区建设&#xff0c;使其成为了游戏界的一股清流。 一、《背包乱斗》为…

Hadoop学习记录一

HDFS&#xff08;Hadoop Distributed File System&#xff09;是Hadoop项目的一部分&#xff0c;用于存储海量数据。HDFS设计为可以在廉价硬件上运行&#xff0c;同时提供高容错性。HDFS主要由三个关键角色组成&#xff1a;NameNode、DataNode和SecondaryNameNode。下面我用大白…

《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样

米哈游的《绝区零》最近在网上爆火呀&#xff0c;不过很多人都想知道mac电脑能不能玩《绝区零》&#xff0c;今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏&#xff0c;Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…

Web前端-Web开发HTML基础1-input

一. 基础 1. 写一个输入框代码&#xff0c;类型为密码&#xff1b; 2. 写一个输入框代码&#xff0c;类型为密码&#xff1b; 3. 写一个输入框代码&#xff0c;类型为密码&#xff0c;名称为"password"&#xff1b; 4. 写一个输入框代码&#xff0c;类型为密码&#…

ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署

最近博主有一些elasticsearch的工作&#xff0c;所以更新的慢了些&#xff0c;现在就教大家快速入门&#xff0c;并对一些基本的查询、更新需求做一下示例&#xff0c;废话不多说开始&#xff1a; 1. ES快速上手 es下载&#xff1a;[https://elasticsearch.cn/download/]()这…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据&#xff0c;例如照片墙、照片等&#xff0c;想实现上级逐级审批通过才可见的效果&#xff0c;于是引入了Acitivity7工作流技术来实现&#xff0c;本文是对实现过程的介绍讲解&#xff0c;由于我是中途交接前同事的这块需求&#xff0c;所以具…

uniapp开发钉钉小程序流程

下载开发工具 1、小程序开发工具 登录钉钉开发平台&#xff0c;根据自己的需求下载合适的版本&#xff0c;我这里下载的是Windows &#xff08;64位&#xff09;版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …