棧的作業 簡單計算器

2021-05-17 11:29:45 字數 2786 閱讀 9476

#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...