詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹
1.用 Java 模擬棧
1.1 棧是什么
棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則來(lái)存儲(chǔ)和訪問(wèn)數(shù)據(jù)。這意味著最后添加到棧中的元素最先被訪問(wèn)和移除,而最先添加到棧中的元素最后被訪問(wèn)和移除。
棧的基本操作包括入棧(push)
,即將元素添加到棧頂;出棧(pop)
,即將棧頂元素移除;以及訪問(wèn)棧頂元素(peek)
。
1.2 模擬棧
(1)在Java
中,Stack
的底層是用數(shù)組來(lái)裝數(shù)據(jù),所以我們這里就用數(shù)組來(lái)模擬。
public class MyStack { //裝數(shù)據(jù) private int[] data; //棧中的數(shù)據(jù)個(gè)數(shù) public int useSize;//初始值為0 public MyStack(){ //初始空間為 10 data = new int[10]; } //返回棧中的元素個(gè)數(shù) public int size(){ return useSize; } }
(2)入棧:當(dāng)空間滿了后擴(kuò)容。
//擴(kuò)容 public void capacity(){ this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length)); } //判斷是否滿了, public boolean isFull () { return useSize == this.data.length; } //入棧,返回插入成功的值 public int push(int val){ if(isFull()){ capacity(); } this.data[useSize] = val; useSize++;//useSize 始終指向的是棧頂元素的下一個(gè)位置。 return val; }
(3)出棧:
//判斷是否為空 public boolean isEmpty() { return useSize == 0; } //出棧,返回出棧的值 public int pop(){ if(isEmpty()){ throw new NullPointerException("???); } return this.data[--useSize]; }
(4)查看棧頂元素:
//查看棧頂元素 public int peek(){ if(isEmpty()){ throw new NullPointerException("棧空"); } return this.data[useSize - 1]; }
1.3 匯總
public class MyStack { //裝數(shù)據(jù) private int[] data; //棧中的數(shù)據(jù)個(gè)數(shù); private int useSize; public MyStack(){ //初始空間為 10 this.data = new int[10]; } //擴(kuò)容 public void capacity(){ this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length)); } //判斷是否滿了, public boolean isFull () { return useSize == this.data.length; } //入棧,返回插入成功的值 public int push(int val){ if(isFull()){ capacity(); } this.data[useSize] = val; useSize++;//useSize 始終指向的是棧頂元素的下一個(gè)位置。 return val; } //判斷是否為空 public boolean isEmpty() { return useSize == 0; } //出棧,返回出棧的值 public int pop(){ if(isEmpty()){ throw new NullPointerException("???); } return this.data[--useSize]; } //查看棧頂元素 public int peek(){ if(isEmpty()){ throw new NullPointerException("棧空"); } return this.data[useSize - 1]; } //返回棧中的元素個(gè)數(shù) public int size(){ return useSize; } }
2.Stack 類(lèi)的介紹
2.1 Stack 的常用方法
在Java
中,Stack
是一個(gè)類(lèi),表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。它繼承自Vector
類(lèi),因此具有Vector
類(lèi)的所有方法,并且還提供了堆棧操作的額外方法。Stack
類(lèi)實(shí)現(xiàn)了棧數(shù)據(jù)結(jié)構(gòu)的基本操作,包括將元素壓入棧頂、從棧頂彈出元素、查看棧頂元素等。
構(gòu)造方法 | 描述 |
---|---|
Stack() | 創(chuàng)建一個(gè)空堆棧 |
方法 | 描述 |
---|---|
E push(E item) | 將元素壓入棧頂部 |
E pop() | 移除棧頂部的元素并返回該元素 |
E peek() | 返回棧頂部的元素而不移除它 |
int size() | 獲取棧中有效元素個(gè)數(shù) |
boolean empty() | 測(cè)試棧是否為空 |
int search(Object o) | 返回對(duì)象在堆棧中的位置,以 1 為基數(shù) |
search(Object o)
方法用于查詢棧中給定元素 o
在該棧中出現(xiàn)的位置。若該元素存在于棧中,則返回該元素在棧中的距離棧頂?shù)奈恢?。棧頂位置?1,往下遞增。
public static void main(String[] args) { // 創(chuàng)建一個(gè)堆棧 Stack<String> stack = new Stack<>(); // 將元素壓入堆棧 stack.push("Java"); stack.push("Python"); stack.push("C++"); // 查找元素在堆棧中的位置 int index1 = stack.search("Java"); int index2 = stack.search("Python"); int index3 = stack.search("C++"); // 輸出元素在堆棧中的位置 System.out.println("Java在堆棧中的位置是:" + index1); System.out.println("Python在堆棧中的位置是:" + index2); System.out.println("C++在堆棧中的位置是:" + index3); }
結(jié)果:
到此這篇關(guān)于詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹的文章就介紹到這了,更多相關(guān)Java棧與Stack類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot Web應(yīng)用開(kāi)發(fā) CORS 跨域請(qǐng)求支持
本篇文章主要介紹了Spring Boot Web應(yīng)用開(kāi)發(fā) CORS 跨域請(qǐng)求支持,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05源碼分析Java中ThreadPoolExecutor的底層原理
這篇文章主要帶大家從源碼分析一下Java中ThreadPoolExecutor的底層原理,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-05-05Java命令設(shè)計(jì)模式優(yōu)雅解耦命令和執(zhí)行提高代碼可維護(hù)性
本文介紹了Java命令設(shè)計(jì)模式,它將命令請(qǐng)求封裝成對(duì)象,以達(dá)到解耦命令請(qǐng)求和執(zhí)行者的目的,從而提高代碼可維護(hù)性。本文詳細(xì)闡述了該模式的設(shè)計(jì)原則、實(shí)現(xiàn)方法和優(yōu)缺點(diǎn),并提供了實(shí)際應(yīng)用場(chǎng)景和代碼示例,幫助讀者深入理解和應(yīng)用該模式2023-04-04從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理
這篇文章主要介紹了從字節(jié)碼角度解析synchronized和反射的實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Springboot整合hibernate validator 全局異常處理步驟詳解
本文分步驟給大家介紹Springboot整合hibernate validator 全局異常處理,補(bǔ)呢文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Java如何取掉json數(shù)據(jù)中值為null的屬性字段
這篇文章主要介紹了Java如何取掉json數(shù)據(jù)中值為null的屬性字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常
這篇文章主要介紹了Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常,@ControllerAdvice ,@ControllerAdvice是一個(gè)非常有用的注解,顧名思義,這是一個(gè)增強(qiáng)的 Controller,一般配合@ExceptionHandler使用來(lái)處理全局異常,需要的朋友可以參考下2024-01-01