⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 finfipos.c

📁 generalised stack using array
💻 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 + -