想問問大佬們為什么進堆疊失敗了,求求大佬們看看孩子吧qwq
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char base[20];
char top;
}charstack;
typedef struct{
int base[20];
int top;
}numstack;
void Pushchar(charstack *s,char x)//插入字符x
{
s->base[s->top]=x;
s->top ++;
}
void Pushnum(numstack *s,int x)//插入數字x
{
s->base[s->top]=x;
s->top ++;
}
void Popnum (numstack *s,int *x)//彈出數字x
{
x=&s->base[s->top];
s->top --;
}
void Popchar (charstack *s,char *x)//彈出字符x
{
x=&s->base[s->top ];
s->top --;
}
int getIndex(char theta) //獲取theta所對應的索引
{
int index = 0;
switch (theta)
{
case '+':
index = 0;
break;
case '-':
index = 1;
break;
case '*':
index = 2;
break;
case '/':
index = 3;
break;
case '(':
index = 4;
break;
case ')':
index = 5;
break;
case '#':
index = 6;
default:break;
}
return index;
}
int Operate(int a,char op,int b)//運算
{
switch(op)
{
case'+':return a+b;break;
case'-':return a-b;break;
case'*':return a*b;break;
case'/':return a/b;break;
default:return 0;break;
}
}
int find(int a,int b) //構造優先關系表
{
int table[7][7] = {
1,1,-1,-1,-1,1,1,
1,1,-1,-1,-1,1,1,
1,1,1,1,-1,1,1,
1,1,1,1,-1,1,1,
-1,-1,-1,-1,-1,0,2,
1,1,1,1,2,1,1,
-1,-1,-1,-1,-1,2,0
};
return table[a][b];
}
int main()//算符優先演算法
{
charstack OPTR;
numstack OPND;
OPTR.top =0;
OPND.top =0;
char c,q;
char x,y;
int a=0,b=0,t=0,f=0;
Pushchar(&OPTR,'#');
Popchar(&OPTR,&y);
printf("%c",y);
c=getchar();
q='#';
while(c!='#'||q!='#')
{
if(c>='0'&&c<='9')
{
t=c-'0';
Pushnum(&OPND,t);
c=getchar();
}
else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
{
f=find(getIndex(q),getIndex(c));
if(f==-1)
{
Pushchar(&OPTR,c);
c=getchar();
}
else if(f==0)
{
Popchar(&OPTR,&x);
c=getchar();
}
else if(f==1)
{
Popnum(&OPND,&a);
Popnum(&OPND,&b);
Popchar(&OPTR,&y);
Pushnum(&OPND,Operate(a,y,b));
c=getchar();
}
Popchar(&OPTR,&y);
q=y;
Pushchar(&OPTR,y);
}
}
Popnum(&OPND,&t);
printf("%d\n",t);
return t;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/223357.html
標籤:新手樂園
上一篇:Uva227 求助!
下一篇:vs環境下全特化編譯失敗
