程序相对简单易懂,运行程序,
在命令行中输入:123+*#(注意:由于输入字符,以‘#’结束)
输出:5.000000#include
#include
typedef struct
{
float *base;
float *top;
int StackSize;
}Stack;
//创建一个栈,100为Maxsize,#define无法定义
void Createstack(Stack &s)
{
s.base=(float *)malloc(100 * sizeof(float));
s.top=s.base;
s.StackSize=100;
}
//栈顶指针
float top(Stack s)
{
if(s.top==s.base)
{
return -1;
printf("error!\n");
//栈满
}
return *(s.top-1);
}
// 入栈程序
void push(Stack &s,float elem)
{
if(s.top-s.base>=s.StackSize)
{
//扩展栈空间
s.base=(float *)realloc(s.base,(s.StackSize+10)*sizeof(float));
s.top=s.base+s.StackSize;
s.StackSize+=10;
}
*s.top++ = elem;
}
//出栈程序
void pop(Stack &s)
{
if(s.top==s.base)
{
//栈空
printf("error!\n");
return ;
}
s.top--;
}
//判断输入运算符
int operate(char c)
{
switch(c)
{
case '+' :return 1;
case '-' :return 1;
case '*' :return 1;
case '/' :return 1;
default :return 0;
}
}
//输入表达式
float cal(float a,float b,char c)
{
switch(c)
{
case '+' :return a+b;
case '-' :return a-b;
case '*' :return a*b;
case '/' :return a/b;
}
}
//主函数
int main()
{
float a,b,result;
Stack s;
Createstack(s);
char c1='0';
printf("输入后缀表达式:");
while(c1!='#')
{
c1=getchar();
if(!operate(c1))
{
push(s,(float) (c1-48));
}
else
{
b=top(s);
pop(s);
a=top(s);
pop(s);
result=cal(a,b,c1);
push(s,result);
}
}
printf("%f\n",result);
system("pause");
//创建一个新栈,用于计算n的阶乘
Stack m;
Createstack(m);
float i,n,item = 1;
printf("请输入一个数字:");
scanf("%f",&n) ;
for (float i = n; i >= 1; i--)
push(m, i);
while (m.top != m.base){
item= top(m) * item;
pop(m);
}
printf("n的阶乘为:");
printf("%f",item) ;
return 0;
}