對于棧和鏈表,數組之間關系的一些探索

先貼臉來個圖
這是一個解析圖,總體是個棧(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.pswp.cn/web/45798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45798.shtml
英文地址,請注明出處:http://en.pswp.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-高效極客技巧 新建項目及相關配置 新建項目 …