#include
#include
#include
#include
#define max 15
#define bool int
typedef struct stack
*stack;
stack initstack()
s->top=-1;
return s;
}void destory(stack s)
bool isempty(stack s)
bool isfull(stack s)
void push(stack s, char c)
printf("stack full!/n");
system("pause");
}void pop(stack s)
printf("stack empty!/n");
system("pause");
}char top(stack s)
printf("stack no element!/n");
return '/0';
}void match(stack s, char c)
':if(top(s)=='else
case ')':if(top(s)=='(')else
case ']':if(top(s)=='[')else
default :;}}
typedef struct stack_int
*stack_int;
stack_int initstack_int()
s->top=-1;
return s;
}void pop_int(stack_int s)
printf("stack empty!/n");
system("pause");
}void destory_int(stack_int s)
void push_int(stack_int s, int c)
printf("stack full!/n");
system("pause");
}int top_int(stack_int s)
printf("stack no element!/n");
return 0;
}int power(int n1,int n2)
case '^':return power(n1,n2);
case '%':return n1%n2;}}
void computer()
;int i=0,n1,n2,result;
bool one=0;
printf("please input your string to compute!/n");
a=getchar();
while(a!='/n'&&a!='=')
else
}else
switch(a)
else
else
if(s_num->top == -1)
else
push_int(s_num,compute(n2,temp,n1));
}push(s_oper,a);
break;
}case '*':
case '/':
case '^':
case '%':
if(isempty(s_oper)||top(s_oper)=='+'||top(s_oper)=='-'||top(s_oper)=='(')
else
else
if(s_num->top == -1)
else
push_int(s_num,compute(n2,temp,n1));
}push(s_oper,a);
break;
}case '(':
push(s_oper,a);break;
case ')':
else
if(s_num->top == -1)
else
push_int(s_num,compute(n2,temp,n1));
}pop(s_oper);
break;
}default :}}
a=getchar();
}while(!isempty(s_oper))
result = top_int(s_num);
pop_int(s_num);
if(s_num->top != -1)
printf("the result is %d! /n",result);
//free(s_oper);
//free(s_num);
//destory(s_oper);
//destory_int(s_num);
}int main()
//這個計算器是在學完棧以後寫的,內容比較簡單,標準c程式。
//但是除錯起來並不是很輕鬆,就幾個小的錯誤竟然弄得很鬱悶。
//其中一處是在match();**,這是原來測試棧用的,後來異想天開向一邊測試一下括號匹配,結果好不容易找到
//還有str陣列本來就是乙個臨時儲存空間用於轉化為數字,不過剛開始str[i]='/0';裡面的i寫成了i++,s所以很鬱悶。呵呵
//幸虧有這個錯誤,讓我學會了debug。
//還是有收穫的!所以記錄一下!
//最後想請高手幫忙解決乙個問題,就是最後注釋的空間釋放的部分,如果不注釋掉每次執行到此處都會發生錯誤,真不知道是為什麼。
//希望高手能夠指點,謝謝了!
簡單計算器(棧)
開始複習棧,這個題感覺見得很多,各種各樣的,但是核心思路就是把中綴表示式轉化為字尾表示式,我們老師說這個東西也叫作中序二叉樹轉後序二叉樹。大概實現的方式就是用棧來實現 最開始感覺沒啥思路,因為之前一直都不會這種題 論為什麼我這麼菜,之前沒有好好學過棧,知道了stl中有stack後還是方便很多 第一次...
簡單計算器 STL 棧
讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後...
簡單計算器(棧結構)
描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值.輸入格式 多case,包含若干個測試用例,每個用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應結果不要輸出.輸出格式 每個測試用例輸出一行,即該表示式的值,精確到小數點後2...