0

تبدیل میانوندی به پسوندی

 
rezahashemian1374
rezahashemian1374
کاربر برنزی
تاریخ عضویت : مهر 1391 
تعداد پست ها : 254
محل سکونت : تهران

تبدیل میانوندی به پسوندی
پنج شنبه 28 شهریور 1392  11:31 PM

تبدیل میانوندی به پسوندی

#include<stdio.h>
#include<string.h>
#define size 10

char stack[size];
int tos=0,ele;
void push();
char pop();
void show();
int isempty();
int isfull();
char infix[30],output[30];
int prec(char);
//Functions for operations on stack
void push(int ele)
{
    
stack[tos]=ele;
    
tos++;
}

char pop()
{
    
tos--;
    return(
stack[tos]);
}

void show()
{
    
int x=tos;    
    
printf("--The Stack elements are.....");
    while(
x!=0)
    
printf("%c, ",stack[--x]);
}

//Function to get the precedence of an operator
int prec(char symbol)
{

if(
symbol== '(')
return 
0;
if(
symbol== ')')
return 
0;
if(
symbol=='+' || symbol=='-')
return 
1;
if(
symbol=='*' || symbol=='/')
return 
2;
if(
symbol=='^')
return 
3;
return 
0;
}

int main()
{
        
int i=0,j=0,k=0,length;
        
char temp;
        
printf("\nEnter an infix expression:");
        
scanf("%s",infix);
        
printf("\nThe infix expresson is %s",infix);
        
length=strlen(infix);
        for(
i=0;i<length;i++)
        {
            
//Numbers are added to the out put QUE
            
if(infix[i]!='+' && infix[i]!='-' && infix[i]!='*' && infix[i]!='/' && infix[i]!='^' && infix[i]!=')' && infix[i]!='(' )
            {
            
output[j++]=infix[i];
            
printf("\nThe element added to Q is:%c",infix[i]);
            }
            
//If an operator or a bracket is encountered...
            
else
            {
                if(
tos==0//If there are no elements in the stack, the operator is added to it
                
{
                
push(infix[i]);
                
printf("\nThe pushed element is:%c",infix[i]);
                }
                else 
                {       
//Operators or pushed or poped based on the order of precedence
                    
if(infix[i]!=')' && infix[i]!='(')
                    {
                        if(    
prec(infix[i]) <= prec(stack[tos-1])  )
                        {
                        
temp=pop();
                        
printf("\n the poped element is :%c",temp);
                        
output[j++]=temp;
                        
push(infix[i]);
                        
printf("\n The pushed element is :%c",infix[i]);
                        
show();
                        }
                        else
                        {
                        
push(infix[i]);
                        
printf("\nThe pushed element is:%c",infix[i]);
                        
show();
                        }
                    }
                    else
                    {
                        if(
infix[i]=='(')
                        {
                        
push(infix[i]);
                        
printf("\nThe pushed-- element is:%c",infix[i]);
                        }
                        if(
infix[i]==')')
                        {
                        
temp=pop();
                        while(
temp!='(')
                        {
output[j++]=temp;
                        
printf("\nThe element added to Q is:%c",temp);
                        
//temp=pop();
                        
printf("\n the poped element is :%c",temp);
                        
temp=pop();}
                        }
                    }

                }
                    
            }    
    
 
printf("\nthe infix expression is: %s",output);

        }
        while(
tos!=0)
        {
            
output[j++]=pop();
        }
 
printf("the infix expression is: %s\n",output);

}

Seyyed.Reza.Hashemian@Gmail.Com

دوستانی که سوالی دارند یا مایل به تماس هستند می توانند از اطلاعات بالا استفاده نمایند.

اگر هم تایپکی زدید و احتیاج به پاسخگویی سریع داشتید اطلاع دهید

تشکرات از این پست
دسترسی سریع به انجمن ها