首页
/
每日頭條
/
圖文
/
算法入門複習
算法入門複習
更新时间:2026-03-22 06:06:29
算法入門之棧前言

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

數組簡介

鍊表簡介

什麼是棧

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

算法入門複習(算法入門之棧)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
推荐阅读
德雲社孟鶴堂燒餅相聲全集
德雲社孟鶴堂燒餅相聲全集
曆時近3個月的第六季《歡樂喜劇人》,于上周日落下帷幕正式收官。雖說5組挺進總決賽的嘉賓,均無前幾季名氣大,但依然是各個喜劇團體的中堅力量,總決賽舞台上也同往年一樣競争激烈。最終結果,金霏陳曦摘得年度喜劇之王桂冠,由德雲社包攬亞季軍:孟鶴堂和...
2026-03-22
八零的愛情
八零的愛情
今天二零二二年五月二十号,衆人都知道520代表我愛你的意思,你們這天都為對象做了些什麼浪漫的事???我先說下自己吧,本來看朋友圈都曬的圖發的一三一四五二零等等,本來我也想跟個風,然而我對象說什麼都不用,在她需要的時候我再給就是了,這日子過不...
2026-03-22
最美的一池荷花古詩
最美的一池荷花古詩
一朵荷花古詩六首賞讀:曉開一朵煙波上,一朵荷花滿院香最大氣最大樣的花朵,莫過于荷花。花朵盛開時的直徑可以長達10到20厘米。菡萏花苞遠看玲珑,近看修美,也可以達到15厘米。且荷花花朵非常均勻,在一個荷塘當中,風調雨順,荷花都是差不多大小。而...
2026-03-22
膽顫心驚的上一句是什麼
膽顫心驚的上一句是什麼
通夜就是守夜的意思。頭一次經曆身邊親人過世,各式各樣的不懂。因為想陪親人到最後,我跟孩子決定守夜。日本的葬儀真的繁索,專門有人員給你講解各個程序,填了好多單子,用了很多時間,他們屬于一條龍式服務,日程安排的很詳細。下午4點多葬儀館的工作人員...
2026-03-22
孕期胎兒雙頂徑表
孕期胎兒雙頂徑表
雙頂徑是指胎兒頭部左右兩側之間最寬部位的長度。很多孕媽媽擔心胎兒的雙頂徑過大會導緻難産,雙頂徑小則是營養不良的症狀,其實這些認識都是錯誤的。哆啦今天就給各位孕媽普及一下神秘的雙頂徑。胎兒雙頂徑是什麼意思胎兒雙頂徑,是指胎兒頭部左右兩側之間最...
2026-03-22
Copyright 2023-2026 - www.tftnews.com All Rights Reserved