📄 finfipos.c
字号:
/* TO CONVERT INFIX NOTATION TO POSTFIX NOTATION */
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#define MAX 50
struct infix
{
char target[MAX];
char stack[MAX];
char *s,*t;
int top;
};
void ininfix(struct infix *);
void setexpr(struct infix *,char *);
void push(struct infix *,char);
char pop(struct infix *);
void convert(struct infix *);
int priority (char);
void show(struct infix);
void main()
{
struct infix p;
char expr[MAX];
ininfix(&p);
clrscr();
printf("\n\\t\t ***** TO CONVERT INFIX TO POSTFIX *****");
printf("\n Enter the expression in infix notation:\n");
gets(expr);
setexpr(&p,expr);
convert(&p);
printf("\n\t THE POSTFIX EXPRESSION IS:");
show(p);
getch();
}
void ininfix(struct infix *p)
{
p->top = -1;
strcpy (p->target, "");
strcpy (p->stack, "");
p->t = p->target;
p->s ="";
}
void setexpr(struct infix *p,char *str)
{
p->s = str;
}
void push(struct infix *p,char c)
{
if( p->top == MAX)
printf("\n Stack is full");
else
{
p->top++;
p->stack[p->top] = c;
}
}
char pop(struct infix *p)
{
char item;
if(p-> top == -1)
{
printf("\n Stack is empty");
return -1;
}
else
{
item = p->stack[p->top];
p->top--;
return item;
}
}
void convert(struct infix *p)
{
char opr;
while(*(p->s))
{
if (*(p->s) == ' ' || *(p->s) == '\t')
{
p->s++;
continue;
}
if(isdigit (*(p->s)) || isalpha(*(p->s)))
{
while (isdigit (*(p->s)) || isalpha(*(p->s)))
{
*(p->t) = *(p->s);
p->s++;
p->t++;
}
}
if (*(p->s) == '(')
{
push(p,*(p->s));
p->s++;
}
if(*(p->s) == '+'|| *(p->s) == '*' || *(p->s) == '/'||
*(p->s) == '%' || *(p->s) == '-' || *(p->s) == '$')
{
if(p->top != -1)
{
opr = pop(p);
while (priority(opr) >= priority(*(p->s)))
{
*(p->t)= opr;
p->t++;
opr = pop(p);
}
push(p,opr);
push(p,*(p->s));
}
else
push(p,*(p->s));
p->s++;
}
if(*(p->s) == ')')
{
opr = pop(p);
while((opr)!= '(')
{
*(p->t)= opr;
p->t++;
opr = pop(p);
}
p->s++;
}
}
while(p->top != -1)
{
char opr =pop(p);
*(p->t) = opr;
p->t++;
}
*(p->t)='\0';
}
int priority(char c)
{
if( c == '$')
return 3;
if(c == '*' || c == '/'|| c == '%')
return 2;
if(c == '+' || c == '_')
return 1;
return 0;
}
void show(struct infix p)
{
printf("%s",p.target);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -