你标题错了,高手不会帮你的, 只有我这种菜鸟才需要你的题目来练习练习,
搞了一天,差不多了.
既然是你的题目,就把代码发上来
我对数据结构不懂, 高手指点指点, 别骂我.
程序代码:
/* 解題思路: 設add(x,y)x為a位置, y 為b位置
* 1. 建立一個棧, 用來存放b位置的數
* 2. 讀取一個數, 判斷其位置.是b位置,壓入棧.
* 2. 搜索下一個數據, 如果是a位置,就从栈中讀取一個數計算
* 3. 如果是b位置, 就繼續壓入.
* 4. 對計算結果. 如果是a位置, 繼續計算.如果是b位置,壓入.
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#define ADD(a, b) a+b
#define MIN(a, b) a<b ? a : b
#define MAX(a, b) a>b ? a : b
#define MAXCH 300 // 最大字符300
#define MAXNUM 60 // 栈最多只要存60个数.
void push(int num); // 壓入函数
int top(void); // 弹出函数
int comput(int a); // 計算結果
static int num [MAXNUM+2]; // 保存數據的棧
static int *val = num; // 指向棧的指針
static char str[MAXCH+1]; // 保存串
static char *p = str;
int main()
{
int num;
int n;
int i;
printf("輸入計算數.\n");
while ((scanf("%d", &n)) ==1 && (n < 0 || n > 10))
printf("請重新輸入\n");
for (; n > 0; n--) {
scanf("%s", str);
while (*p++) // 指針指向棧尾
;
while (p != str) {
while (!(*p <= '9' && *p >= '0')) // 數的最後一位
p--;
num = 0;
for (i = 0; *p <= '9' && *p >= '0'; ++i, p--) // 把字符轉換為數值
num += (*p - '0') * (int)pow(10, i);
if (*p == ',') // 如果是 b位置 就壓入棧, 讀下一個數
push(num);
else {
while (*p == '('){ // 如果是 a位置 就從棧中彈出一個數計算
num = comput(num); // 如果計算結果是 a位置 就循環
}
if (*p == ',') // 如果計算結果是 b位置, 就壓入棧
push(num);
}
}
printf("%d\n", num);
}
return 0;
}
void push(int num)
{
*(++val) = num;
}
int top(void)
{
int b = *val;
val--;
return b;
}
int comput(int a)
{
int res, b;
b = top();
p = &p[-3];
if (memcmp(p, "add", 3) == 0)
res = ADD(a,b);
else if (memcmp(p, "min",3) == 0)
res = MIN(a, b);
else
res = MAX(a, b);
if (p != str)
p--;
return res;
}