棧的三種實現(xiàn)

一膳音、基于deque實現(xiàn)

優(yōu)點:利用deque動態(tài)管理內存召衔,棧的內存無上限,STL中的棧也是基于deque實現(xiàn)的祭陷。

 template<class T> class MyStack{
     deque<T> dq;
 public:
     void push(T element){
         dq.push_back(element);
     }
     void pop(){
         assert(!empty());
         dq.pop_back();
     }
     bool empty(){
         return dq.empty(); 
     }
     T& top(){
         assert(!empty());
         return dq.back();
     }
 };

二苍凛、基于數(shù)組實現(xiàn)

數(shù)組可選靜態(tài)數(shù)組或動態(tài)數(shù)組,兩種實現(xiàn)方式類似兵志,都需要預選設定一個棧的最大容量醇蝴。優(yōu)點在于:實現(xiàn)簡單,支持隨機存儲想罕;缺點是空間受限悠栓。

typedef int TYPE;
const int STACK_SIZE = 100;
TYPE MysSack[STACK_SIZE]; 
int top_pos = -1;  

bool isEmpty(){
    return top_pos == -1;
}
bool isFull(){
    return top_pos == STACK_SIZE - 1;
}
 void push(TYPE element){
     assert(!isFull());
     MysSack[++top_pos] = element;
 }
 void pop(){
     assert(!isEmpty());
     --top_pos;
 }
 TYPE& top(){
     assert(!isEmpty());
     return MysSack[top_pos];
 }

3、基于鏈表實現(xiàn)

優(yōu)點是:存儲空間不收限制;缺點是惭适,需要存儲額外的鏈接信息笙瑟,并且
銷毀棧需要O(n)的時間。

 typedef int TYPE;
 typedef struct STACK_NODE {   
     TYPE value;  
     struct STACK_NODE *next;  
 } StackNode;  
 static StackNode *MyStack;  

 int isEmpty(void){  
     return MyStack == NULL;  
 }  
 int isFull(void){  
     return FALSE;  
 }
 void pop(void)  {  
     StackNode *first_node;  
     assert(!isEmpty());  
     first_node = MyStack;  
     MyStack = first_node->next;  
     free(first_node);  
 }  
 void push(TYPE value) {  
     StackNode *new_node;  
     new_node = (StackNode *)malloc(sizeof(StackNode));  
     if(new_node == NULL)  
         perror("malloc fail");  
     new_node->value = value;  
     new_node->next = MyStack;  /* 新元素插入鏈表頭部 */  
     MyStack = new_node;       /* stack 重新指向鏈表頭部 */  
 }  
 TYPE top(void)  {  
     assert(!isEmpty());  
     return MyStack->value;  
 }  
 void destroy_stack(void)  {  
     while(!isEmpty())  
         pop();  /* 逐個彈出元素腥沽,逐個釋放節(jié)點內存 */  
 }  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末逮走,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子今阳,更是在濱河造成了極大的恐慌师溅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾舌,死亡現(xiàn)場離奇詭異墓臭,居然都是意外死亡,警方通過查閱死者的電腦和手機妖谴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門窿锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膝舅,你說我怎么就攤上這事嗡载。” “怎么了仍稀?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵洼滚,是天一觀的道長。 經(jīng)常有香客問我技潘,道長遥巴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任享幽,我火速辦了婚禮铲掐,結果婚禮上,老公的妹妹穿的比我還像新娘值桩。我一直安慰自己摆霉,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布奔坟。 她就那樣靜靜地躺著携栋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛀蜜。 梳的紋絲不亂的頭發(fā)上刻两,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音滴某,去河邊找鬼磅摹。 笑死滋迈,一個胖子當著我的面吹牛,可吹牛的內容都是我干的户誓。 我是一名探鬼主播饼灿,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帝美!你這毒婦竟也來了碍彭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤悼潭,失蹤者是張志新(化名)和其女友劉穎庇忌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舰褪,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡皆疹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了占拍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片略就。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晃酒,靈堂內的尸體忽然破棺而出表牢,到底是詐尸還是另有隱情,我是刑警寧澤贝次,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布崔兴,位于F島的核電站,受9級特大地震影響浊闪,放射性物質發(fā)生泄漏恼布。R本人自食惡果不足惜螺戳,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一搁宾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倔幼,春花似錦盖腿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膏燃,卻和暖如春茂卦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背组哩。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工等龙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留处渣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓蛛砰,卻偏偏與公主長得像罐栈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泥畅,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容