棧的作用是將遞迴函式轉換成非遞迴函式,由於在階乘中只有乙個引數,把引數入棧即可
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 佔空間增量 棧結構...