سلام خدمت مهندسای گل .من چند تا سوال در مورد برنامه نویسی درس ساختمان داده دارم.مثلا الگوریتم تبدیل infix to prefixوچندتای دیگه که از کسی که راهنماییم کنه ممنون میشم.در ضمن دانشجوی طرم3هف هستم.از هم رشتهایا اگه کسی کمکی خواست در خدمتم.:20:
Printable View
سلام خدمت مهندسای گل .من چند تا سوال در مورد برنامه نویسی درس ساختمان داده دارم.مثلا الگوریتم تبدیل infix to prefixوچندتای دیگه که از کسی که راهنماییم کنه ممنون میشم.در ضمن دانشجوی طرم3هف هستم.از هم رشتهایا اگه کسی کمکی خواست در خدمتم.:20:
اره این infix to prefix یکم رو مخ ادم میرهنقل قول:
من اینجوری نوشته بودمش اگه نگاه کنی سرفایل charStack براش تعریف شده این یه پشته ای هستش که توی فایل جداگانه هست و کدش اینجا نیومده
کد:#include "stdafx.h"
#include "charStack.h"
#include<iostream>
#include<string>
using namespace std;
using namespace System;
using namespace System::Security;
#define M 21
void in2pre(char infix[],char prefix[]);
void reverse(char x[]);
int isOperand(char x);
int elder(char symbol,char topSymbol);
int main(array<System::String ^> ^args)
{
char infix[M],prefix[M];
cin.getline(infix,M);
reverse(infix);
in2pre(infix,prefix);
reverse(prefix);
cout<<prefix<<endl;
return 0;
}
void reverse(char x[])
{
char temp;
int length=strlen(x)-1;
for(int i=0;i<(length/2)+1;i++)
{
temp=x[i];
x[i]=x[length-i];
x[length-i]=temp;
}
}
void in2pre(char infix[],char prefix[])
{
charStack s;
int j=0,underflow;
char symbol,topSymbol;
for(int i=0;infix[i];i++)
{
symbol=infix[i];
if(isOperand(symbol))
{
prefix[j++]=symbol;
}
else if (symbol==')')
{
s.push(symbol);
}
else if (symbol=='(')
{
s.popAndTest(topSymbol,underflow);
while(topSymbol!=')')
{
prefix[j++]=topSymbol;
s.popAndTest(topSymbol,underflow);
}
}
else
{
s.topAndTest(topSymbol,underflow);
if(s.empty()||elder(symbol,topSymbol))
{
s.push(symbol);
}
else
{
s.popAndTest(topSymbol,underflow);
while(!elder(symbol,topSymbol) && !underflow)
{
prefix[j++]=topSymbol;
s.popAndTest(topSymbol,underflow);
}
s.push(symbol);
}
}
}
while(!s.empty())
{
s.popAndTest(topSymbol,underflow);
prefix[j++]=topSymbol;
}
prefix[j]='\0';
}
int elder(char symbol,char topSymbol)
{
int sy,to;
switch(symbol)
{
case ')':
sy=0;
break;
case '+':
sy=1;
break;
case '-':
sy=1;
break;
case '*':
sy=2;
break;
case '/':
sy=2;
break;
case '%':
sy=2;
break;
}
switch(topSymbol)
{
case ')':
to=0;
break;
case '+':
to=1;
break;
case '-':
to=1;
break;
case '*':
to=2;
break;
case '/':
to=2;
break;
case '%':
to=2;
break;
}
if(sy>=to)
return 1;
return 0;
}
int isOperand(char x)
{
if(x>='0'&&x<='9')
return 1;
return 0;
}
اگر فقط الگوریتمشو میخواین فکر کنم 1 تاپیک تو همین بخش بود که الگوریتمشو از کتاب هورویتس-ساهنی نوشته بودن!
این و هم بگم که من برای نوشتنش از فایل زیر کمک گرفتم که از سایت psplanet.com دانلود کرده بودم بد نیست یهش بندازی
کد:http://nzmehran.persiangig.com/p30world/Algebraic_1620577272003.zip
اینم برنامه Infix to Postfix
کد:http://www.forum.p30world.com/showthread.php?t=278419