首页
/
每日頭條
/
圖文
/
算法入門複習
算法入門複習
更新时间:2025-07-12 16:57:05
算法入門之棧前言

了解完算法的基本數據結構鍊表和數組後,我們就可以開始了解基于這些基本數據衍生出來的其它數據結構,如堆、棧、隊列等,今天詳細聊聊棧,其它文章參考

數組簡介

鍊表簡介

什麼是棧

棧是一種線性結構,最常見的生活中的例子就是羽毛球筒

算法入門複習(算法入門之棧)1

羽毛球筒隻開放一端入口,那麼先放入的球一定是在底部,最後放入的球在最頂部,拿球時先獲取的就是靠近頂部的球,隻有不停的獲取才能将底部的球拿到。

棧也就是這樣,隻能從一端入棧和出棧,這種順序我們稱為FILO(First In Last Out)先進後出,最早進入的元素稱為棧底,最後進入的元素我們稱為棧頂,如下

算法入門複習(算法入門之棧)2

棧是鍊表和數組的基本數據的衍生結構,所以可以采用鍊表或者數據實現,具體思路如下

數組實現棧

用數組來實現棧太簡單,我們可以參考之前數組的相關文章

數組簡介

入棧就是在數組的尾部插入元素不涉及到數組元素移動,出棧就是将數組尾部的元素清除,示意圖如下

入棧

算法入門複習(算法入門之棧)3

出棧

算法入門複習(算法入門之棧)4

實現代碼

/** *用數組實現棧 */ classMyStack1{ //數組的實際大小 privateintsize; privateObject[]arr; publicMyStack1(intcapacity){ arr=newObject[capacity]; size=0; } //入棧 publicvoidpush(Objectdata){ if(size==arr.length){ thrownewRuntimeException("超過棧的最大容量"); } arr[size]=data; size ; } //出棧 publicObjectpull(){ if(size==0){ thrownewRuntimeException("棧為空!"); } Objectdata=arr[size-1]; //恢複數組指定位置默認值 arr[size-1]=null; size--; returndata; } publicvoidshow(){ System.out.println("打印棧存放數據:" Arrays.toString(arr)); } }

鍊表實現棧

鍊表實現棧同樣是尾部指針的移動,如下是鍊表實現的示意圖

算法入門複習(算法入門之棧)5

入棧就是将原隊尾的next指針指向新節點即可,而出棧就是将原隊尾節點的上一個節點的next指針指向null。

入棧

算法入門複習(算法入門之棧)6

出棧

算法入門複習(算法入門之棧)7

實現代碼如下

/** *用鍊表實現棧 */ classMyStack2{ //鍊表元素個數 privateintsize; //頭節點 privateNodehead; //尾節點 privateNodelast; //入棧 publicvoidpush(Objectdata){ Nodenode=newNode(data); if(size==0){ head=node; last=node; }else{ last.next=node; last=node; } size ; } //出棧 publicObjectpull(){ if(size==0){ thrownewRuntimeException("棧數據為空"); } Objectdata=last.data; if(size==1){ head=null; last=null; }else{ //獲取倒數第二個節點 Nodeindex=getIndex(size-2); index.next=null; last=index; } size--; returndata; } //獲取指定下标的元素從0開始 publicNodegetIndex(intindex){ if(index<0||index>=size){ thrownewRuntimeException("數組下标異常"); } Nodetemp=head; for(inti=0;i<index;i ){ temp=temp.next; } returntemp; } publicvoidshow(){ Nodetemp=head; while(temp!=null){ System.out.println(temp); temp=temp.next; } } } classNode{ //數據 Objectdata; //下一個節點指針 Nodenext; publicNode(Objectdata){ this.data=data; next=null; } @Override publicStringtoString(){ return"Node{" "data=" data ",next=" next '}'; } }

總結

從操作代碼可以看出,無論棧的實現方式是采用數組還是鍊表,入棧出棧都非常簡單僅僅是一個元素的移動,所以入棧和出棧操作時間複雜度都為O(1)。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
錦心似玉譚松韻是自己配音嗎(錦心似玉譚松韻飾演的十一娘怼人功夫實在了得啊)
錦心似玉譚松韻是自己配音嗎(錦心似玉譚松韻飾演的十一娘怼人功夫實在了得啊)
  昨晚由鐘漢良、譚松韻主演的《錦心似玉》開播,在播出的劇集當中,十一娘可稱得上是智慧擔當了,那怼人的功夫實在了得啊!   十一娘ko二娘   二娘為掙得嫁入徐府續弦正室,設計陷害十一娘與王世子的親事,被十一娘拆穿,并狠狠地回敬過去。         十一娘ko喬姨娘      十一娘ko自家相公      三殺!ok!這個怼天怼地地徐府主母可越來越有主母地...
2025-07-12
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
  詳細解讀《道德經》40      反動弱用   〈原文〉   反者道之動,弱者道之用。   天下萬物生于有,有生于無。   〈注釋〉   反:翻轉,反向,相反。   弱:柔弱。   〈譯文〉   向自己的反面運動,是道的運動特征;   依靠柔弱發揮作用,是道的應用特征。   天地萬物總稱為有,有生于無。   〈解讀〉   本章主要是闡述了道的運動特征和道...
2025-07-12
核苷酸填充面部的危害(人們說我像辛普森)
核苷酸填充面部的危害(人們說我像辛普森)
  據英國《太陽報》報道,一名英國女子在嘴唇填充物溶解後出現了嚴重過敏反應,被緊急送往醫院。      報道截圖   這名女性化名露比,她在短視頻平台TikTok上分享了這段痛苦的經曆,該視頻在一天内被觀看了近50萬次。   據露比說,過敏反應非常糟糕,導緻她上唇腫大,臉部腫脹。盡管在一些照片中露比面帶微笑,但她表示,她再也不想做嘴唇整形了。   報道稱,有...
2025-07-12
天津港現狀(天津港四變)
天津港現狀(天津港四變)
        在中國北方最大的綜合性港口天津港,來自美洲、歐洲、東南亞的貨物在此集結轉運,服務國内國際雙循環。夏德崧攝(中經視覺)   面朝渤海,心向遠洋。   2019年1月17日,在天津港考察時強調,“經濟要發展,國家要強大,交通特别是海運首先要強起來。要志在萬裡,努力打造世界一流的智慧港口、綠色港口,更好服務京津冀協同發展和共建‘一帶一路’”。   ...
2025-07-12
從此江湖再無的詩句(天下獨步的步非非妙境的非)
從此江湖再無的詩句(天下獨步的步非非妙境的非)
     ​   步,非,煙! 天下獨步的步,非非妙境的非,煙華鼎盛的煙。步非煙這樣解釋自己的名字。   有人說步非煙是武俠作家的“超女”,甚至她的讀者自稱“煙絲”。她的走紅是比較快,因為确實是兼具了實力與偶像元素的武俠寫手。實力,因為她是才女;偶像,因為她是美女。      ​   ​   她的作品文字妖娆豔麗,想象精彩奇特,意境恢宏壯闊。使其成名的《武林...
2025-07-12
Copyright 2023-2025 - www.tftnews.com All Rights Reserved