首页
/
每日頭條
/
圖文
/
算法入門複習
算法入門複習
更新时间:2025-04-18 10:01:18
算法入門之棧前言

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

數組簡介

鍊表簡介

什麼是棧

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

算法入門複習(算法入門之棧)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
推荐阅读
單身一姐浙江(她公認的一姐)
單身一姐浙江(她公認的一姐)
  中國乒乓球夢之隊,在世界乒壇一直都是神一般的存在,不可逾越,國寶級運動員更是讓他國垂涎三尺,裡約奧運國乒派出女子“三劍客”丁甯、李曉霞、劉詩雯,這樣一個豪華整容,直接劍指總冠軍,毋庸置疑,三人組中女子單打肯定就在她們中産生,最近手感發燙的丁甯成為最大奪冠熱門。這位“女神”大家有多了解?今天小編就帶你走進她的生活。  丁甯原來還是九零後,出生1990年6月...
2025-04-18
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
  詳細解讀《道德經》40      反動弱用   〈原文〉   反者道之動,弱者道之用。   天下萬物生于有,有生于無。   〈注釋〉   反:翻轉,反向,相反。   弱:柔弱。   〈譯文〉   向自己的反面運動,是道的運動特征;   依靠柔弱發揮作用,是道的應用特征。   天地萬物總稱為有,有生于無。   〈解讀〉   本章主要是闡述了道的運動特征和道...
2025-04-18
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
  中國質量新聞網訊 (楊振遠)砸廣告、刷直播、上綜藝,紐西之謎可謂是近兩年風頭正勁的美妝品牌。然而,中國質量新聞網接消費者投訴稱,使用該品牌“爆款”産品“紐西之謎溫泉水乍彈面膜”後,“感覺油油的,很奇怪”,她通過查詢相關資料,認為紐西之謎所宣傳的“礦物質”護膚理念并沒有權威的科學數據支持,因此對其功效和安全性提出了質疑。   接訴後,中國質量新聞網委托專業...
2025-04-18
周筆暢奔跑吧兄弟在第幾期(從極限男人幫到鄧超鹿晗)
周筆暢奔跑吧兄弟在第幾期(從極限男人幫到鄧超鹿晗)
  就算是在普通人的世界裡,真正的友情都非常難得,更何況是娛樂圈呢?   一腳踏入這個圈子的時候,就已經牽扯到各種各樣的利益關系了。   更何況如今娛樂圈裡也面臨着資源不夠分的情況,這也就意味着有些明星之間也是免不了要進行一番資源争奪。      所謂“既生瑜何生亮”,有争奪就會結下梁子,哪怕是之前關系再好的朋友,日後也極有可能會撕破臉皮。   話雖如此,難...
2025-04-18
核苷酸填充面部的危害(人們說我像辛普森)
核苷酸填充面部的危害(人們說我像辛普森)
  據英國《太陽報》報道,一名英國女子在嘴唇填充物溶解後出現了嚴重過敏反應,被緊急送往醫院。      報道截圖   這名女性化名露比,她在短視頻平台TikTok上分享了這段痛苦的經曆,該視頻在一天内被觀看了近50萬次。   據露比說,過敏反應非常糟糕,導緻她上唇腫大,臉部腫脹。盡管在一些照片中露比面帶微笑,但她表示,她再也不想做嘴唇整形了。   報道稱,有...
2025-04-18
Copyright 2023-2025 - www.tftnews.com All Rights Reserved