堆棧(C語言)

堆棧(順序存儲(chǔ))數(shù)組方式
typedef struct{
    int Data[MAXSIZE];
    int Top;
}Stack;
void Push(Stack *stack,int value){
    if(stack->Top==MAXSIZE-1){//數(shù)組有界
        printf("堆棧滿");
    }else{
        stack->Data[++(stack->Top)]=value;
        return;
    }
}
int Pop(Stack *stack){
    if(stack->Top==-1){//為空檢查
        printf("堆棧為空");
        return ERROR;
    } else
    return stack->Data[stack->Top--];
}
一個(gè)有界數(shù)組存儲(chǔ)兩個(gè)堆棧
#define MAXSIZE 50
   /*一個(gè)有界數(shù)組存儲(chǔ)兩個(gè)堆棧叛溢,如果數(shù)組有空間則執(zhí)行入棧操作,(一個(gè)向右增長枪向,一個(gè)向左增長)
    * */
   typedef struct DStack{
       int data[MAXSIZE];
       int Top1;
       int Top2;
   }Stacks;
   void Push(Stacks *stacks,int value,int Tag){
       if(stacks->Top2-stacks->Top1==1){
           printf("堆棧滿");return;
       }
       if(Tag==1)
           stacks->data[++stacks->Top1]=value;
       else
           stacks->data[--stacks->Top2]=value;
   }
   int Pop(Stacks *stacks,int Tag){
       if(Tag==1){
           if(stacks->Top1==-1){
               printf("堆棧1空");
               return NULL;
           }else {
               return stacks->data[stacks->Top1--];
           }
       }else{
           if(stacks->Top2==MAXSIZE){
               printf("堆棧2空");
               return NULL;
           }else{
               return stacks->data[stacks->Top2++];
           }
       }
   }
   int main() {
       Stacks *stacks;
       stacks->Top1=-1;
       stacks->Top2=MAXSIZE;//初始化兩個(gè)堆棧頭指針
       return 0;
   }

堆棧(鏈?zhǔn)酱鎯?chǔ))
/*用單向鏈表表示棧時(shí)候,棧Top結(jié)點(diǎn)一定是鏈頭結(jié)點(diǎn)
 * */
typedef struct Node{
    int value;
    struct Node *next;
}LinkedStack;
LinkedStack * CreateLinkedStack(){
    LinkedStack *stack;
    stack=(LinkedStack *)malloc(sizeof(LinkedStack));
    stack->next=NULL;
    return stack;
};
int isEmpty(LinkedStack *stack){//注意Top結(jié)點(diǎn)沒有值卿泽,只有一個(gè)單鏈表的頭指針
    return (stack->next==NULL);
}
void Push(LinkedStack *stack,int value){
    LinkedStack *insertElement;
    insertElement=malloc(sizeof(LinkedStack));//分配內(nèi)存空間
    insertElement->value=value;//插入的值賦值給結(jié)點(diǎn)
    insertElement->next=stack->next;//將已存在鏈表鏈接到插入的結(jié)點(diǎn)
    stack->next=insertElement;//改變Top結(jié)點(diǎn)
}
int Pop(LinkedStack *stack){
    int result;
    LinkedStack *popElement;
    if(isEmpty(stack)){
        printf("鏈表為空");
        return ERROR;
    }else{
        popElement=stack->next;
        result=popElement->value;
        stack->next=popElement->next;
        free(popElement);//記得釋放無用內(nèi)存空間
        return result;
    }
}

中綴表達(dá)式如何轉(zhuǎn)換為后綴表達(dá)式
從頭到尾讀取中綴表達(dá)式的每一個(gè)對(duì)象

  • 1.運(yùn)算數(shù):直接輸出

  • 2.左括號(hào):壓入堆棧

  • 3.右括號(hào):將棧頂?shù)倪\(yùn)算符彈出并輸出,直到遇到左括號(hào)(出棧不輸出)

  • 4.運(yùn)算符:
    若優(yōu)先級(jí)大于棧頂運(yùn)算符榄审,則壓棧
    若優(yōu)先級(jí)小于等于棧頂運(yùn)算符驳概,將棧頂運(yùn)算符彈出,
    再比較新的棧頂運(yùn)算符旅薄,直到改運(yùn)算符大于棧頂運(yùn)算符優(yōu)先級(jí)為止辅髓,然后壓棧

  • 5.若個(gè)對(duì)象處理完畢,則把堆棧中存留的運(yùn)算符一并輸出

堆棧用途:

  • 函數(shù)調(diào)用及遞歸實(shí)現(xiàn)
  • 深度優(yōu)先搜索
  • 回溯算法
更多關(guān)于java的文章請(qǐng)戳這里:(您的留言意見是對(duì)我最大的支持)

我的文章列表
Email:sxh13208803520@gmail.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赋秀,一起剝皮案震驚了整個(gè)濱河市利朵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猎莲,老刑警劉巖绍弟,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異著洼,居然都是意外死亡樟遣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門身笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豹悬,“玉大人,你說我怎么就攤上這事液荸≌胺穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵娇钱,是天一觀的道長伤柄。 經(jīng)常有香客問我,道長文搂,這世上最難降的妖魔是什么适刀? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮煤蹭,結(jié)果婚禮上笔喉,老公的妹妹穿的比我還像新娘。我一直安慰自己硝皂,他們只是感情好常挚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稽物,像睡著了一般待侵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姨裸,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天秧倾,我揣著相機(jī)與錄音怨酝,去河邊找鬼。 笑死那先,一個(gè)胖子當(dāng)著我的面吹牛农猬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播售淡,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斤葱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揖闸?” 一聲冷哼從身側(cè)響起揍堕,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汤纸,沒想到半個(gè)月后衩茸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贮泞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年楞慈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啃擦。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡囊蓝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出令蛉,到底是詐尸還是另有隱情聚霜,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布珠叔,位于F島的核電站蝎宇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏运杭。R本人自食惡果不足惜夫啊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一函卒、第九天 我趴在偏房一處隱蔽的房頂上張望辆憔。 院中可真熱鬧,春花似錦报嵌、人聲如沸虱咧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腕巡。三九已至,卻和暖如春血筑,著一層夾襖步出監(jiān)牢的瞬間绘沉,已是汗流浹背煎楣。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留车伞,地道東北人择懂。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像另玖,于是被迫代替她去往敵國和親困曙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 棧的規(guī)則 先進(jìn)后出谦去。如:依次入棧順序?yàn)椋篈,B,C,D;怎出棧順序?yàn)椋篋,C,B,A . 二叉樹和表達(dá)式 表達(dá)式的...
    zhangivon閱讀 831評(píng)論 0 0
  • 基礎(chǔ)知識(shí) 基本概念 常見數(shù)據(jù)結(jié)構(gòu) 棧和隊(duì)列 棧Stack 隊(duì)列Queue 樹和堆 樹的定義 樹(tree)是包含n...
    passwd_閱讀 1,465評(píng)論 0 2
  • 136.泛型 泛型代碼讓你可以寫出靈活,可重用的函數(shù)和類型,它們可以使用任何類型,受你定義的需求的約束慷丽。你可以寫出...
    無灃閱讀 1,466評(píng)論 0 4
  • 一直以來,我都很少使用也避免使用到樹和圖,總覺得它們神秘而又復(fù)雜鳄哭,但是樹在一些運(yùn)算和查找中也不可避免的要使用到要糊,那...
    24K男閱讀 6,751評(píng)論 5 14
  • 47號(hào) Susie 2017年6月14號(hào)打卡 1.【音頻】清華幼兒英語0b Unit3-10 2.【視頻】清華幼兒...
    029108296e5b閱讀 218評(píng)論 0 0