c語言棧的應用

2021-07-25 13:20:43 字數 1325 閱讀 3323

棧的作用是將遞迴函式轉換成非遞迴函式,由於在階乘中只有乙個引數,把引數入棧即可

int nfact(int n)

//出棧,模擬函式返回過程

while(!isemptystack(*stack))

return res;

}

利用堆疊進行一位表示式的運算:

在生活中用的是類似(9 * 7) + 8的表示式,這種表示式叫做中綴表示式,表示式利於觀察但是不利於計算機計算

我們進行計算的時候輸入 9 7 *  8 +,這種方式叫做字尾表示式,它的特點是操作符跟在兩個運算元後面,不用括號

所以我們要做的第一件事情就是把中綴表示式轉換成字尾表示式;

轉換思路:1.讀到乙個數字則將數字送入到佇列中

2.當遇到操作符的時候,將其入棧,每讀兩個數字時候,出棧乙個操作符送入佇列中

3.當操作符是左括號時候,此時操作符將一直入棧,直到讀到了右括號,出棧所有的操作符,送到左括號中

字尾表示式的計算:

1.在佇列種讀取到乙個數字字元時,將其入棧

2.在佇列中讀取到乙個操作符時,從棧中讀取兩個運算元進行計算,將結果入棧

3.最後堆疊所剩的唯一乙個元素就是運算結果

字尾表示式計算**(從鍵盤輸入字尾表示式,中綴表示式轉換成字尾表示式未來得及用**實現,下次實現):

#include#include#includetypedef char user_type;

#include "stack.h"

void skipblank(char *str);

void getdeal(char *str);

void dealalpha(char ch);

void getout();

pseqstack *stack = null;

void dealalpha(char ch)//前兩個元素出棧運算,將運算結果入棧

}void skipblank(char *str)

else

} str[j] = 0;//字串結束標誌

}void getdeal(char *str)

else }}

void getout()

int main()

; printf("請輸入字尾表示式:\n");

gets(str);

skipblank(str);//跳過空格

createmptystack(&stack,strlen(str));

getdeal(str);

getout();

return 0;

}

棧的應用(c語言)

新增鏈結描述 toc bool bracketcheck char str,int length 括號匹配 else char topelem pop s,topelem 棧頂元素出棧 if str i topelem return false if str i topelem return fal...

C語言棧的應用

c語言棧的應用 棧的作用是將遞迴函式轉換成非遞迴函式,由於在階乘中只有乙個引數,把引數入棧即可。int nfact int n 出棧,模擬函式返回過程 while isemptystack stack return res 利用堆疊進行一位表示式的運算 在生活中用的是類似 9 7 8的表示式,這種表...

c語言 括號匹配檢測(棧的應用)

括號匹配檢測,對於一串帶括號的字元 1.如果是左括號,入棧 2.如果是右括號,與棧頂元素比較,若形成括號對,則棧頂左括號出棧 若不能形成括號對,則括號不能匹配 include include define init size 6 初始棧空間 define incre size 2 佔空間增量 棧結構...