首页
/
每日頭條
/
圖文
/
算法入門複習
算法入門複習
更新时间:2025-03-28 23:42:06
算法入門之棧前言

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

數組簡介

鍊表簡介

什麼是棧

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

算法入門複習(算法入門之棧)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
推荐阅读
楊紫戰長沙把霍建華演哭了(楊紫和霍建華含蓄的愛)
楊紫戰長沙把霍建華演哭了(楊紫和霍建華含蓄的愛)
  電視劇表達愛情用得最濫的情節之一肯定有擁吻,就連古裝劇也沒有例外,甚至更比都市劇有過之而無不及——套路非常恒定:第一次見面,不管大路多麼寬廣,兩個人總能碰在一起,然後總能抱住,一旦抱在一塊,嘴唇的位置總能恰到好處地兩兩對印,而且無論雙方高度有多大懸殊都不是事。   要是碰不上,也有辦法,那就來一波強吻,現在上線的《雙世寵妃2》全程都在賣這個景色,跟《1》...
2025-03-28
田蕾是獨立的女人嗎(看了誰說我結不了婚)
田蕾是獨立的女人嗎(看了誰說我結不了婚)
     這是一部由潘粵明、童謠、陳數、袁文康、許芳銥、李燊主演的都市言情戲。三個大齡女生充滿了正能量,童謠演的程璐是一個35歲金牌編劇,陳數演的田蕾是一家律師事務所的一姐,許芳銥演的是美容院老闆丁詩雅,她們都熱愛生活,健康善良,對工作有目标、肯拼搏,對于愛情,她們敢于堅持,都是讨人喜歡的女孩。但今天小編想聊的是陳數演的田蕾,陳數是一個絕對的實力派演員,年過...
2025-03-28
99a有什麼優缺點(新一批99A浩浩蕩蕩出廠)
99a有什麼優缺點(新一批99A浩浩蕩蕩出廠)
  新一批99A浩浩蕩蕩出廠,目标指向39集團軍某機步師,99A坦克是我國在前型99式主戰坦克基礎上自行研制的第三代改進型主戰坦克,采用原99式坦克的車體結構,在火力打擊、導航定位、晝夜觀瞄、動力傳動等系統上,采用新技術、新材料進一步提升了戰車的綜合作戰效能。據推測其最大作戰行程為500公裡。      99A坦克全車長7.7米,全寬3.5米,全高2.25米...
2025-03-28
暴雨期間河堤撈魚(撈了鯉魚和草魚30多條)
暴雨期間河堤撈魚(撈了鯉魚和草魚30多條)
  連日來,不少地方連降大雨,河道漲水,田間地頭來了不少大魚,附近村民随手撈魚,特别開心。   鯉魚、草魚、鲢魚、鳙魚……在廣東清遠,田間地頭出現了魚群。有網友在朋友圈發了不少照片,展示捕撈的魚類。      這些魚類,大部分是從魚塘裡跑出來的,有鯉魚、鲫魚、黑魚及四大家魚等,當地養殖戶損失巨大。   在農村,養殖業的風險比較大,因為水火無情。特别到了梅雨季...
2025-03-28
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
  提到蔣勤勤,很多人的第一印象可能是:“瓊瑤女郎”,早期瓊瑤的光環讓大多數人都隻注意到了蔣勤勤的美貌,她是真的非常好看,以至于忽略了蔣勤勤的演技,但是她早期演過的武俠或者言情劇,由于她有那種剛烈氣質的古典美,令她可以輕而易舉地駕馭起一些形象,像:練霓裳,趙繡雲,第二夢,明月,沈心慈,玉嬌龍,穆念慈,這些角色上沒有設定重複,也是演什麼就是像什麼,沒有在演自己...
2025-03-28
Copyright 2023-2025 - www.tftnews.com All Rights Reserved