#include
#include
struct stack
{
int top;
char* m;
int maxsize;
};
typedef struct stack stack;
void inistack(stack* s, int size);
int push(stack* s, char item);
int pop(stack* s);
int main()
{
stack* zhong = (stack*)malloc(sizeof(stack));
char z[80];
int n,i = 0;
inistack(zhong, 80);
printf("输入中缀表达式:");
scanf_s("%s", z,80);
while (z[i] != '\0')
{
switch (z[i])
{
case '(':
printf("vvv");
push(zhong, z[i]);
break;
default:
printf("%c", z[i]);
}
i++;
}
while (zhong->top != -1)
{
printf("%c", zhong->m[zhong->top]);
pop(zhong);
}
return 0;
}
#初始化
void inistack(stack* s, int size)
{
s->maxsize = size;
s->m = (char*)malloc(sizeof(char) * s->maxsize);
s->top = -1;
}
#入栈
int push(stack* s, char item)
{
if (s->top != s->maxsize--)
{
s->top++;
s->m[s->top] = item;
}
else
printf("full");
return 0;
}
#出栈
int pop(stack* s)
{
//printf("%c", s->m[s->top]);
s->top--;
return 0;
}
麻烦求解一下,需要在输入算式时,不要让左括号与数字绑定
代码没什么问题,输入算式(3+3) 时,字符间不能有空格等,没有出现题主的问题。有一处错误,在入栈函数 push()里,做修改标志,供参考:
#include<stdio.h>
#include<stdlib.h>
struct stack
{
int top;
char* m;
int maxsize;
};
typedef struct stack stack;
void inistack(stack* s, int size);
int push(stack* s, char item);
int pop(stack* s);
int main()
{
stack* zhong = (stack*)malloc(sizeof(stack));
char z[80];
int n, i = 0;
inistack(zhong, 80);
printf("输入中缀表达式:");
scanf_s("%s", z, 80);
while (z[i] != '\0')
{
switch (z[i])
{
case '(':
//printf("vvv:");
push(zhong, z[i]);
break;
case ')':
push(zhong, z[i]);
break;
case '+':
push(zhong, z[i]);
break;
default:
//printf("%c", z[i]);
push(zhong, z[i]);
}
i++;
}
while (zhong->top != -1)
{
printf("%c", zhong->m[zhong->top]);
pop(zhong);
}
return 0;
}
//#初始化
void inistack(stack*s, int size)
{
s->maxsize = size;
s->m = (char*)malloc(sizeof(char) * (s->maxsize));
s->top = -1;
}
//#入栈
int push(stack* s, char item)
{
if (s->top != s->maxsize - 1) //if (s->top != s->maxsize--) 修改
{
s->top++;
s->m[s->top] = item;
}
else
printf("full");
return 0;
}
//#出栈
int pop(stack* s)
{
//printf("%c", s->m[s->top]);
s->top--;
return 0;
}
初始化要传入二级指针