Java數據結構---棧

目錄

一、棧的概念

二、棧的基本方法

三、棧的模擬實現?

四、棧的練習

1、括號匹配??

?2、出棧入棧次序匹配


一、棧的概念

棧是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。其特點是數據元素先進后出(先入棧的元素后出棧)

?入棧與出棧:

入棧:棧的插入操作叫做進棧/壓棧/入棧。入數據在棧頂。

出棧:棧的刪除操作叫做出棧。出數據在棧頂。

還不太理解的小伙伴可以看看以下圖示:

?

?

二、棧的基本方法

?棧的基本方法有:push()(入棧)、pop()(出棧)、peek()(獲取棧頂元素,不刪除)、empty()(判斷棧是否為空)

三、棧的模擬實現?

?以下的代碼我們默認數據元素是整型。

import java.util.Arrays;public class MyStack {public int[] elem;//存放數據的數組public int usedSize;//當前數據的個數public MyStack() {elem=new int[10];}//入棧public void push(int val){if(isFull()){//滿了就擴容elem= Arrays.copyOf(elem,elem.length*2);}elem[usedSize]=val;usedSize++;}//判斷棧是否滿了private boolean isFull(){return elem.length==usedSize;}//出棧public int pop(){if(isEmpty()){return -1;}int getVal=elem[usedSize-1];usedSize--;return getVal;}//判斷棧是否為空public boolean isEmpty(){return usedSize==0;}//獲取棧頂元素,不刪除public int peek(){if(isEmpty()){return -1;}return elem[usedSize-1];}
}

四、棧的練習

1、括號匹配??

?20. 有效的括號 - 力扣(LeetCode)

題目要求如下:?

?

?解題思路:先創建一個字符類型的棧,再遍歷字符串,如果是左括號就入棧,如果是右括號,就看是否與棧頂元素匹配,不匹配返回false,遍歷結束后看棧是否為空,不為空則返回false(這是為了防止類似于"(((("的情況出現)。

class Solution {public boolean isValid(String s) {Stack<Character> stack=new Stack<>();//創建一個字符類型的棧for(int i=0;i<s.length();i++){char ch=s.charAt(i);//獲取i下標字符if(ch=='('||ch=='{'||ch=='['){//如果是左符號,入棧stack.push(ch);}else{if(stack.empty()){//判斷棧是否為空,為空則返回falsereturn false;}char loop=stack.peek();//判斷左右是否匹配,若不匹配則返回false,否則棧頂元素出棧if(loop=='('&&ch==')'||loop=='['&&ch==']'||loop=='{'&&ch=='}'){stack.pop();}else{return false;}}}//遍歷結束后看棧是否為空,不為空則返回false(這是為了防止類似于"(((("的情況出現)if(!stack.empty()){return false;}return true;}
}

?2、出棧入棧次序匹配

棧的壓入、彈出序列_牛客題霸_牛客網

題目要求如下:?

?

解題思路:創建一個整型棧,遍歷pushV,對每個元素進行入棧操作,再創建一個循環,判斷該元素是否與popV[j]相等,若相等則出棧,移動j下標,當遍歷完pushV后,若棧空,則匹配,反之不匹配。

import java.util.*;public class Solution {/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** * @param pushV int整型一維數組 * @param popV int整型一維數組 * @return bool布爾型*/public boolean IsPopOrder (int[] pushV, int[] popV) {// write code hereStack<Integer> stack=new Stack<>();//創建一個整型棧int j=0;for(int i=0;i<pushV.length;i++){//遍歷pushVstack.push(pushV[i]);//入棧//如果棧頂元素與popV[j]相等,出棧,移動j下標while(j<popV.length&&!stack.empty()&&popV[j]==stack.peek()){stack.pop();j++;}}return stack.empty();}
}

以上便是本篇文章的全部內容,感謝各位看官支持~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70386.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從CNN到Transformer:遙感影像目標檢測的未來趨勢

文章目錄 前言專題一、深度卷積網絡知識專題二、PyTorch應用與實踐&#xff08;遙感圖像場景分類&#xff09;專題三、卷積神經網絡實踐與遙感影像目標檢測專題四、卷積神經網絡的遙感影像目標檢測任務案例【FasterRCNN】專題五、Transformer與遙感影像目標檢測專題六、Transfo…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI進程&#xff0c;提升PHP應用的性能和穩定性 php-fpm是一個高性能的php FastCGI管理器&#xff0c;提供了更好的php進程管理方式&#xff0c;可以有效的控制內存和進程&#xff0c;支…

Python strip() 方法詳解:用途、應用場景及示例解析(中英雙語)

Python strip() 方法詳解&#xff1a;用途、應用場景及示例解析 在 Python 處理字符串時&#xff0c;經常會遇到字符串前后存在多余的空格或特殊字符的問題。strip() 方法就是 Python 提供的一個強大工具&#xff0c;專門用于去除字符串兩端的指定字符。本文將詳細介紹 strip(…

open webui 部署 以及解決,首屏加載緩慢,nginx反向代理訪問404,WebSocket后端服務器鏈接失敗等問題

項目地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 選擇了docker部署 如果 Ollama 在您的計算機上&#xff0c;請使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

docker安裝ros2 并在windows中顯示docker內ubuntu系統窗口并且vscode編程

這里包括docker desktop安裝ros2 humble hawkshill , 安裝xserver(用來在windows中顯示ubuntu中窗口), vscode安裝插件連接docker并配置python的一系列方法 1.安裝xserver 為了能方便的在windows中顯示ubuntu內的窗口,比如rqt窗口 參考文章:https://www.cnblogs.com/larva-zhh…

VMware安裝Centos 9虛擬機+設置共享文件夾+遠程登錄

一、安裝背景 工作需要安裝一臺CentOS-Stream-9的機器環境&#xff0c;所以一開始的安裝準備工作有&#xff1a; vmware版本&#xff1a;VMware Workstation 16 鏡像版本&#xff1a;CentOS-Stream-9-latest-x86_64-dvd1.iso &#xff08;kernel-5.14.0&#xff09; …

C/C++ 中 volatile 關鍵字詳解

volatile 關鍵字是一種類型修飾符&#xff0c;用它聲明的類型變量表示可以被某些編譯器未知的因素更改&#xff0c;比如&#xff1a;操作系統、硬件或者其它線程等。遇到這個關鍵字聲明的變量&#xff0c;編譯器對訪問該變量的代碼就不再進行優化&#xff0c;從而可以提供對特殊…

處理器架構、單片機、芯片、光刻機之間的關系

這些術語都涉及到半導體和電子設備的設計與制造&#xff0c;但它們的含義和作用有所不同。下面我會逐個解釋&#xff0c;并描述它們之間的關系&#xff1a; 1. 處理器架構 (Processor Architecture) 處理器架構指的是處理器&#xff08;CPU&#xff09;的設計原理和結構。它定…

python之socket編程

Socket編程是計算機網絡編程的基礎&#xff0c;它允許兩臺計算機&#xff08;或同一個計算機的不同進程&#xff09;之間進行通信。Python 提供了 socket 模塊&#xff0c;可以很方便地進行 Socket 編程。下面是一些基本的 Socket 編程示例&#xff0c;包括 TCP 和 UDP。 TCP …

Docker 的安全配置與優化(二)

Docker 安全優化策略 &#xff08;一&#xff09;多階段構建優化鏡像大小 多階段構建是 Docker 17.05 版本引入的強大功能&#xff0c;它允許在一個 Dockerfile 中定義多個構建階段&#xff0c;每個階段都可以使用不同的基礎鏡像和依賴項&#xff0c;最終只將必要的文件和依賴…

歐洲跨境組網專線:企業出海的高效網絡解決方案

在全球化的背景下&#xff0c;越來越多的企業將業務拓展至海外市場&#xff0c;并在歐洲等地設立分支機構。然而&#xff0c;跨境辦公中常常面臨公網網絡延遲高、打開速度慢、丟包嚴重等問題&#xff0c;這不僅影響辦公效率&#xff0c;還增加了IT維護的難度和成本。針對這一痛…

面陣工業相機提高餐飲業生產效率

餐飲行業是一個快節奏、高要求的領域&#xff0c;該領域對生產過程中每一個階段的效率和準確性都有很高的要求。在食品加工、包裝、質量控制和庫存管理等不同生產階段實現生產效率的優化是取得成功的關鍵步驟。面陣工業相機能夠一次性捕捉對象的二維區域圖像&#xff0c;并支持…

Renesas RH850 IAR編譯時變量分配特定內存

文章目錄 1. 核心作用2. 典型使用場景3. 示例代碼4. 編譯器與鏈接腳本協作5. 注意事項6. 調試驗證在RH850系列微控制器的開發中,#pragma location = "FIRST_RAM" 是一條編譯器指令,其核心含義是 將變量或函數分配到名為 FIRST_RAM 的特定內存段。以下是詳細解釋: …

C++面試題,進程和線程方面(1)

文章目錄 前言進程和線程有什么不同進程&#xff0c;線程的通訊方式什么是鎖為什么說鎖可以使線程安全加鎖有什么副作用總結 前言 這是個人總結進程和線程方面的面試題。如果有錯&#xff0c;歡迎佬們前來指導&#xff01;&#xff01;&#xff01; 進程和線程有什么不同 進程…

視頻mp4垂直拼接 水平拼接

視頻mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 獲取目錄下的所有視頻文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

Unity攝像機與燈光相關知識

一、Inspector窗口 Inspector窗口可以查看和編輯對象的屬性以及設置 其中包含各種組件&#xff0c;例如用Cube對象來舉例 1.Sphere(Mesh)組件&#xff1a; 用來決定對象的網格屬性&#xff0c;例如球體網格為Sphere、立方體網格為Cube 2.Mesh Renderer組件&#xff1a; 用來設置…

C++(17):為optional類型構造對象

C++(17):optional,多了一個合理的選擇_c++17 max-CSDN博客 介紹了optional做為函數返回值的一種方式 其實optional也可以作為對象來使用 #include &

探索關鍵領域的AI工具:機器學習、深度學習、計算機視覺與自然語言處理

引言 在人工智能(AI)迅猛發展的今天&#xff0c;機器學習(ML)、深度學習(DL)、計算機視覺(CV)和自然語言處理(NLP)已經成為解決復雜問題的關鍵技術。無論是自動駕駛車輛的視覺識別&#xff0c;還是智能助手的對話理解&#xff0c;這些技術都在改變著世界。本文將介紹在各個領域…

基于vue和微信小程序的校園自助打印系統(springboot論文源碼調試講解)

第3章 系統設計 3.1系統功能結構設計 本系統的結構分為管理員和用戶、店長。本系統的功能結構圖如下圖3.1所示&#xff1a; 圖3.1系統功能結構圖 3.2數據庫設計 本系統為小程序類的預約平臺&#xff0c;所以對信息的安全和穩定要求非常高。為了解決本問題&#xff0c;采用前端…

Windows 快速搭建C++開發環境,安裝C++、CMake、QT、Visual Studio、Setup Factory

安裝C 簡介 Windows 版的 GCC 有三個選擇&#xff1a; CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系統上運行的工具集&#xff0c;用于在 Windows 環境下進行開發和編譯。 Cygwin 是一個在 Windows 上運行的開源項目&#xff0c;旨在提供類Uni…