ايران ويج

نسخه‌ی کامل: تبدیل infix به postfix به وسیله لیست پیوندی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام.
خواهش میکنم کمک کنید
برنامه تبدیل infix به postfix و postfix به infix با استفاده از لیست پیوندی با زبان ++c
سلامم
این کد Postfix به prefix

کد:
#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
#define flag '#'

using namespace std;

bool isOperator(char c)
{
    if(c=='+' || c=='-' || c=='*' || c=='/' || c=='^' || c=='$')
    return true;
    else
    return false;
}

int main()
{
    stack<char> stk;
    char postfix[30], prefix[30];
    int j=0,len;
    cout<<"Input a postfix expression: ";
    cin>>postfix;
    len = strlen(postfix);
    for(int i=len-1;i>=0;i--)
    {
        if(isOperator(postfix[i]))
        stk.push(postfix[i]);
        else
        {
            prefix[j++] = postfix[i];
            while(!stk.empty() && stk.top()==flag)
            {
                stk.pop();
                prefix[j++] = stk.top();
                stk.pop();
            }
            stk.push(flag);
        
        }
    }
    prefix[j] = 0;
    reverse(prefix, prefix + len);
    cout<<"The prefix expression is: "<<prefix;
    return 0;
}


(۲۷-اردیبهشت-۱۳۹۴, ۲۱:۳۵:۳۶)zohreh.ma نوشته است: [ -> ]سلام.
خواهش میکنم کمک کنید
برنامه تبدیل infix به postfix و postfix به infix با استفاده از لیست پیوندی با زبان ++c
این هم prefix به Postfix

کد:
void main()
{
char str[MAX],resstr[MAX],temp[MAX];
int i,z;
clrscr();
printf(“nEnter a prefix string?”);
gets(str);
for(i=0;str[i]!=’�';i++);
for(i=i-1,z=0;i>=0;z++,i–)
temp[z]=str[i];
temp[z]=’�';
printf(“nPrefix string: %s”,str);
prefix_to_postfix(temp,resstr);
printf(“nPostfix string: %s”,resstr);
getch();
}

void push(struct stack *s,char ch)
{
if(s->top==MAX-1)
{printf(“Stack Overflow!”);
exit(1);
}
s->arr[++(s->top)]=ch;
}

char pop(struct stack *s)
{
if(s->top==-1)
{printf(“Stack Underflow!”);
exit(1);
}
return(s->arr[(s->top)–]);
}

int isdigit(char ch)
{return(ch>=’0′ && ch<=’9′);
}

void prefix_to_postfix(char instr[],char outstr[])
{
int i,j,ct=1,z=0;
char ch,opnd1,opnd2;
struct stack stk;
stk.top=-1;
for(i=0;instr[i]!=’�';i++)
{
ch=instr[i];
if(isdigit(ch))
{push(&stk,ch);
}
else
{
if(ct==1)
{opnd1=pop(&stk);
opnd2=pop(&stk);
outstr[z++]=opnd1;
outstr[z++]=opnd2;
outstr[z++]=ch;
ct++;
}
else
{
opnd2=pop(&stk);
outstr[z++]=opnd2;
outstr[z++]=ch;
}
}
}
outstr[z]=’�';
}


(۲۷-اردیبهشت-۱۳۹۴, ۲۱:۳۵:۳۶)zohreh.ma نوشته است: [ -> ]سلام.
خواهش میکنم کمک کنید
برنامه تبدیل infix به postfix و postfix به infix با استفاده از لیست پیوندی با زبان ++c
این هم Infix به Postfix
کد:
//Evaluate the given expression
#include<iostream>
#include<stack>
#include<vector>
using namespace std;

//Only single digit numbers permitted

int GetPrecedence(char op)
{
switch (op)
{
case '+':
case '-':
return 1;
case '*':
case '/':
default:
return 2;
}
}
char* ConvertInorderToPreOrder(char* InOrderExp, int Size)
{
stack<char> Operators;
vector<char> PostOrderResult;
for (int i = Size-1; i >=0; i--)
if (InOrderExp[i] >= '0'&& InOrderExp[i] <= '9')
PostOrderResult.push_back(InOrderExp[i]);
else
{
while (!Operators.empty() && GetPrecedence(Operators.top()) >= GetPrecedence(InOrderExp[i]))
{
PostOrderResult.push_back(Operators.top());
Operators.pop();
}
Operators.push(InOrderExp[i]);
}
while (!Operators.empty())
{
PostOrderResult.push_back(Operators.top());
Operators.pop();
}
char *ResultString = (char*)malloc(sizeof(char)*PostOrderResult.size()+1);
memset(ResultString, 0, sizeof(char)*(PostOrderResult.size() + 1));
for (int i = 0; i < PostOrderResult.size(); i++)
ResultString[i] = PostOrderResult[i];
ResultString[PostOrderResult.size()] = '\0';
_strrev(ResultString);
return ResultString;
}
char* ConvertInorderToPostOrder(char* InOrderExp, int Size)
{
stack<char> Operators;
vector<char> PostOrderResult;
for (int i = 0; i < Size; i++)
if (InOrderExp[i] >= '0'&& InOrderExp[i] <= '9')
PostOrderResult.push_back(InOrderExp[i]);
else
{
while (!Operators.empty() && GetPrecedence(Operators.top()) >= GetPrecedence(InOrderExp[i]))
{
PostOrderResult.push_back(Operators.top());
Operators.pop();
}
Operators.push(InOrderExp[i]);
}
while (!Operators.empty())
{
PostOrderResult.push_back(Operators.top());
Operators.pop();
}
char *ResultString = (char*)malloc(sizeof(char)*PostOrderResult.size()+1);
memset(ResultString, 0, sizeof(char)*(PostOrderResult.size()+1));
for (int i = 0; i < PostOrderResult.size(); i++)
ResultString[i] = PostOrderResult[i];
ResultString[PostOrderResult.size()] = '\0';
return ResultString;
}

int main()
{

char InExp[] = "2+3*7-5*2-4/2*5+1-4+2/2+1";
cout << "\nInput: " << InExp;
cout << "\n\n";
cout << "\n\PostFix = " << ConvertInorderToPostOrder(InExp, strlen(InExp));
cout << "\n\PreFix = " << ConvertInorderToPreOrder(InExp, strlen(InExp));
cout << "\n\nEnd of code\n\n";
system("pause");
return 0;
}


(۲۷-اردیبهشت-۱۳۹۴, ۲۱:۳۵:۳۶)zohreh.ma نوشته است: [ -> ]سلام.
خواهش میکنم کمک کنید
برنامه تبدیل infix به postfix و postfix به infix با استفاده از لیست پیوندی با زبان ++c