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

📄 mam.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];
	int top;
};

void ininfix(struct infix *);
void push(struct infix *,char);
char pop(struct infix *);
void convert(struct infix *,char *);
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);
	convert(&p,expr);
	printf("\n\t THE POSTFIX EXPRESSION IS:");
	show(p);
	getch();
}

void ininfix(struct infix *p)
{
	p->top = -1;
	strcpy (p->target, "");
	strcpy (p->stack, "");
}


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 *e)
{
	char opr,*s;
	int i=0;
	s= e;
	while(*s)
	{
		if (*s == ' ' || *s == '\t')
		{
			s++;
			continue;
		}
		if(isdigit (*s) || isalpha (*s))
		{
			while (isdigit (*s) || isalpha(*s))
			{
				p->target[i++] = *s;
				s++;
			}
		 }

		if (*s == '(')
		{
			push(p,*s);
			s++;
		}

	   if(*s == '+'|| *s == '*' || *s == '/'||
	     *s == '%' || *s == '-' || *s == '$')
	   {
		if(p->top != -1)
		{
			opr = pop(p);
			while (priority(opr) >= priority(*s) )
			{
				(p->target[i++])= opr;
				if(p->top == -1)
				break;
				opr = pop(p);

			 }
			 if(priority(opr)!= priority(*s))
			 push(p,opr);
			 push(p,*s);
	       }
		  else
			push(p,*s);
			s++;
	   }

	   if(*s == ')')
	   {
		opr = pop(p);
		while((opr)!= '(')
		{
			p->target[i++]= opr;
			opr  = pop(p);
		}
	       s++;
	  }
	  }
	  while(p->top != -1)
	  {
		opr =pop(p);
		p->target[i++] = opr;

	  }
	  p->target[i]='\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 + -