#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
typedef struct list
{
int * bottom;
int * top;
int data; //用来存栈内元素个数?
}Stack;
void InitStack(Stack * );
void pushStack(Stack * ,int ); //把e推入栈
int popStack(Stack * ); //出栈,把值付给e
int main()
{
Stack stack;
InitStack(&stack);
printf("请输入逆波兰表达式,每个值用空格分开,以#作为结束标识\n");
// string str;
char k; //接收输入
int q,w; //用于接收栈内的元素
int d;//用于接收 字符转换数字
char str[10];
int i =0;
int result;
scanf("%c",&k);
while(k !='#')
{
while(isdigit(k)) //判断输入字符是不是数字 用于过滤数字
{
str[i++] = k; //把字符型输入数组 字符一个一个进入数组,123,1先进去while循环
str[i] = '\0'; //字符最后一位\0
scanf("%c",&k);
if(k ==' ')
{
d = atoi(str);
pushStack(&stack , d);
i = 0; //一定要重新让i= 0,好让str数组记载下一个数值
break; //一定要退出if循环,否则 一直停留在if里面,不进行下面的操作
}
}
switch(k)
{
case '+':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (q+w));
break;
case '-': //减法,后出的 - 先出的
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (w-q));
break;
case '*':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (q*w));
break;
case '/':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (w/q));
break;
}
scanf("%c",&k); // 这个scanf忘记写了,导致4个小时没找到原因。。。。。
}
result = popStack (&stack);
printf("最终计算结果%d",result);
return 0;
}
void InitStack(Stack * stack)
{
stack->bottom = (int *) malloc(100 * (sizeof(int)));
stack->top = stack->bottom;
stack->data = 0;
printf("栈初始化成功");
}
void pushStack(Stack * stack , int e )
{
*(stack->top) = e;
stack->top = ((stack->top) +1);
(stack->data) ++;
printf("压一次了");
}
int popStack(Stack * stack )
{
int e;
e = *(((stack->top) -1)) ;
stack->top = ((stack->top)-1);
printf("出一次");
return e;
}
#include<malloc.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
typedef struct list
{
int * bottom;
int * top;
int data; //用来存栈内元素个数?
}Stack;
void InitStack(Stack * );
void pushStack(Stack * ,int ); //把e推入栈
int popStack(Stack * ); //出栈,把值付给e
int main()
{
Stack stack;
InitStack(&stack);
printf("请输入逆波兰表达式,每个值用空格分开,以#作为结束标识\n");
// string str;
char k; //接收输入
int q,w; //用于接收栈内的元素
int d;//用于接收 字符转换数字
char str[10];
int i =0;
int result;
scanf("%c",&k);
while(k !='#')
{
while(isdigit(k)) //判断输入字符是不是数字 用于过滤数字
{
str[i++] = k; //把字符型输入数组 字符一个一个进入数组,123,1先进去while循环
str[i] = '\0'; //字符最后一位\0
scanf("%c",&k);
if(k ==' ')
{
d = atoi(str);
pushStack(&stack , d);
i = 0; //一定要重新让i= 0,好让str数组记载下一个数值
break; //一定要退出if循环,否则 一直停留在if里面,不进行下面的操作
}
}
switch(k)
{
case '+':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (q+w));
break;
case '-': //减法,后出的 - 先出的
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (w-q));
break;
case '*':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (q*w));
break;
case '/':
q = popStack(&stack);
w = popStack(&stack);
pushStack(&stack , (w/q));
break;
}
scanf("%c",&k); // 这个scanf忘记写了,导致4个小时没找到原因。。。。。
}
result = popStack (&stack);
printf("最终计算结果%d",result);
return 0;
}
void InitStack(Stack * stack)
{
stack->bottom = (int *) malloc(100 * (sizeof(int)));
stack->top = stack->bottom;
stack->data = 0;
printf("栈初始化成功");
}
void pushStack(Stack * stack , int e )
{
*(stack->top) = e;
stack->top = ((stack->top) +1);
(stack->data) ++;
printf("压一次了");
}
int popStack(Stack * stack )
{
int e;
e = *(((stack->top) -1)) ;
stack->top = ((stack->top)-1);
printf("出一次");
return e;
}