Posted on 2012-09-17 12:03
hoshelly 閱讀(1424)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
DS && Algorithm
#include<stdio.h>
#include<
string.h>
#include<stdlib.h>
#define M 1000
static int N;
//N棧的大小
static int *s;
void STACKinit(
int maxN)
//建立一個(gè)動(dòng)態(tài)數(shù)組s,相當(dāng)于建立并初始化棧
{
s = (
int *)malloc(maxN*
sizeof(
int));
N=0;
}
int STACKempty()
{
return N==0;
}
void STACKpush(
int item)
{
s[N++] = item;
}
int STACKpop()
{
return s[--N];
}
int main()
{
char a[M];
gets(a);
//輸入后綴表達(dá)式,每個(gè)整數(shù)之后至少要有一個(gè)空格
int i,len,ok;
char k[15]={' ','0','1','2','3','4','5','6','7','8','9','+','-','/','*'};
len=strlen(a);
while(1)
//檢查輸入字符串的合法性(僅限于檢查輸入是否為包含數(shù)字和+ - * / 和 ' '的字符串)
{
ok=0;
for(i=0;i<len;i++)
{
for(
int j=0;j<15;j++)
{
if(a[i] == k[j])
{
ok=1;
}
}
if(!ok)
{
printf("Input error! please input again:\n");
break;
}
}
if(!ok)
{
gets(a);
len=strlen(a);
}
else break;
}
STACKinit(len);
//初始化N=0
for(i=0;i<len;i++)
{
if(a[i] == '+')
STACKpush(STACKpop()+STACKpop());
if(a[i] == '*')
STACKpush(STACKpop()*STACKpop());
if(a[i] == '-')
{
b = STACKpop();
c = STACKpop();
STACKpush(c-b);
}
if(a[i] == '/')
{
b = STACKpop();
c = STACKpop();
STACKpush(c/b);
}
if((a[i] >= '0') && (a[i] <= '9'))
//如果遇到數(shù)字,則先壓入0進(jìn)棧
STACKpush(0);
while((a[i] >='0') && (a[i] <='9'))
STACKpush(10*STACKpop()+(a[i++]-'0'));
//再將“字符數(shù)字”轉(zhuǎn)換為數(shù)字
}
printf("%d \n",STACKpop());
return 0;
}
示例:
