日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++实现一个栈

發(fā)布時間:2023/12/20 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++实现一个栈 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們先說下棧的知識,先看下我們之前寫的文章

棧,C語言實現(xiàn)

如何自己實現(xiàn)一個棧

堆和棧的區(qū)別(轉(zhuǎn)過無數(shù)次的文章)

這是一個棧

這是我們把數(shù)據(jù)入棧的操作

這是數(shù)據(jù)出棧的操作

之前僚機號里面發(fā)了一個用C++實現(xiàn)的棧文章,比較簡單,基于上一次的代碼再升華一下,我認(rèn)為在熟悉快速寫出一個棧代碼,對大家在面試筆試中幫助是非常大的。

下面寫了兩段代碼實現(xiàn)棧,代碼不一定是完美的,肯定存在問題,但是基本思路我覺得還是可以的,有兩種方法來實現(xiàn),第一種是用數(shù)組來實現(xiàn)棧,還有一種是用指針實現(xiàn)。

如果在面試,面試官說讓你用代碼實現(xiàn)一個棧,因為面試的時間比較緊,而且大多數(shù)人在面試的時候可能會比較緊張,我建議用數(shù)組實現(xiàn),用數(shù)組實現(xiàn)一個棧會簡單很多,說白了有手就行,當(dāng)然了,你要是可以用指針實現(xiàn),而且寫得比較全面,這個是加分的地方。

用數(shù)組實現(xiàn)的時候,我們一個元素就是一個數(shù)組的值,數(shù)組的下標(biāo)可以把整個棧串聯(lián)起來。

#用數(shù)組實現(xiàn)棧

#include?<iostream> using?namespace?std;class?IntStack{enum?{ssize?=?100};int?stack[ssize];int?top;public:/*構(gòu)造函數(shù),初始化top變量的值*/IntStack():top(0){}/*插入數(shù)據(jù)*/void?push(int?i){stack[top++]?=?i;}/*遍歷*/void?TraverseStack(){cout?<<?"---"?<<?endl;for(int?i?=?0;i<top;?++i){?if(i?!=?top?-1)cout?<<stack[i]?<<?"->";elsecout?<<stack[i]?<<?endl;???}?}?/*彈出數(shù)據(jù)*/int?pop(){return?stack[--top];} };int?main() {IntStack?is;for(int?i?=?0;?i<?20;?i++){is.push(i*i);}is.TraverseStack();is.pop();is.TraverseStack();is.pop();is.TraverseStack();is.push(77);is.push(77);is.push(77);is.TraverseStack(); }

程序輸出

--- 0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->324->361 --- 0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->324 --- 0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289 --- 0->1->4->9->16->25->36->49->64->81->100->121->144->169->196->225->256->289->77->77->77-------------------------------- Process?exited?after?0.03563?seconds?with?return?value?0 請按任意鍵繼續(xù).?.?.

上圖是用數(shù)組來實現(xiàn)的,用數(shù)組實現(xiàn)的棧有一個缺陷,就是棧的大小在定義數(shù)組的時候已經(jīng)確定了,不能做到動態(tài)增長。

鏈表有點不一樣,每個節(jié)點都需要有一個地址,用來保存下一個節(jié)點的地址,我們還需要一個head節(jié)點,來保存整個棧的頭,這樣不至于讓我們的棧失去方向。

#用鏈表來實現(xiàn)一個棧

#include?<iostream> using?namespace?std;class?Node{public:int?data;Node?*next; };class?Stack{/*指向棧頂?shù)闹羔?/Node?*top;/*棧長度*/int?size;?public:/*構(gòu)造函數(shù),初始化top變量的值*/Stack(){top?=?new?Node;top->next?=?NULL;/*棧長度設(shè)置為0*/size?=?0;cout?<<?"Stack()"<<endl;}~Stack(){cout?<<?"~Stack()"<<endl;Node?*pTemp?=?top;while(top?!=?NULL){pTemp?=?top;top?=?top->next;delete?pTemp;}size?=?0;}/*插入數(shù)據(jù)*/void?push(int?i){if(top?==?NULL){cout?<<?"stack?is?null"?<<?endl;return;}/*搞一個temp節(jié)點出來*/Node?*temp?=?new?Node;temp->data?=?i;temp->next?=?NULL;/*把temp節(jié)點連接到棧里面去*/if(size?==?0){top?=?temp;?}?else{temp->next?=?top;top?=?temp;}size++;}/*遍歷*/void?TraverseStack(){if(top->next?==?NULL){cout?<<?"stack?is?null"?<<?endl;return;}cout?<<?"---"?<<?endl;Node?*pTemp?=?top;while(pTemp?!=?NULL){if(pTemp->next!=NULL)cout?<<?pTemp->data?<<"->";elsecout?<<?pTemp->data?<<endl;pTemp?=?pTemp->next;}}?/*彈出數(shù)據(jù)*/int?pop(){if(size?==?0){cout?<<?"stack?is?empty"?<<?endl;return?(0);}if(top?==?NULL){cout?<<?"stack?is?empty"?<<?endl;return?(0);}Node?*temp?=?top;top=top->next;cout?<<"pop->data:"<<?temp->data?<<endl;delete?temp;size--;return?(0);}/*獲取棧長度*/int?getLength(){return?size;} };int?main() {Stack?*pStack?=?new?Stack();pStack->push(12);pStack->push(13);pStack->push(14);pStack->push(15);pStack->TraverseStack();pStack->pop();pStack->TraverseStack();pStack->pop();pStack->TraverseStack();delete?pStack;? }

程序輸出

Stack() --- 15->14->13->12 pop->data:15 --- 14->13->12 pop->data:14 --- 13->12 ~Stack()-------------------------------- Process?exited?after?0.03555?seconds?with?return?value?0 請按任意鍵繼續(xù).?.?.

推薦閱讀:

? ??專輯|Linux文章匯總

? ??專輯|程序人生

? ??專輯|C語言

嵌入式Linux

微信掃描二維碼,關(guān)注我的公眾號?

總結(jié)

以上是生活随笔為你收集整理的C++实现一个栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。