!!urgente!!codigodeconversionaprefija

invitado138
14 de Noviembre del 2004
necesito, que por favor alguien me pase el codigo de conversion de una expresion de infija a prefija, o de postfija a prefija, en cualquier lenguaje

Rouken
14 de Noviembre del 2004
viejo aqui te mando una ayuda
//La clase pila

#include<iostream.h>
#include<conio.h>
class pila{
private:
struct nodo{
int infor;
nodo *ant;
nodo *sig;
}*tope;
public:
pila(){tope=NULL;}
~pila(){}
void poner(int);
int quitar();
int vacia(){return tope == NULL;}
};
void pila::poner(int dato){
nodo *p = new(nodo);
if(p){
p->infor = dato;
if(tope){
p->ant = tope;
tope->sig = p;
tope = tope->sig;
}else{
p->ant = NULL;
tope = p;
}
}else
cout<<"Pila Llena, memoria agotada...";
}

int pila::quitar(){
int dato = 0;
if(!vacia()){
dato = tope->infor;
if(tope->ant){
tope = tope->ant;
delete tope->sig;
}else{
delete tope;
tope = NULL;
}
}
return dato;
}

void main(){

clrscr();
int i,x;
pila a;
clrscr();
for(i=1;i<=5;i++){
cout<<"Dato : "; cin>>x;
a.poner(x);
}
while(!a.vacia())
cout<<"n"<<a.quitar();
getch();
}


//PROGRAMA InfijaAPrefija;
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
#define maxpila 50
struct pila{
int tope;
char infor[maxpila];
};
void iniciarpila(pila *p);
int pilavacia(pila *p);
int pilallena(pila *p);
void meter(pila *p,char dato);
void sacar(pila *p,char &dato);
int i, prioridad(char signo), operador(char signo);
char cima(pila *p);
int prioridadCima,prioridadOper;
char op,c,d,infija[50];
pila auxiliar,intermedia,prefija;

void main(){
do{
system("cls");
cout <<"nnConversi¢n de Expresiones Infijas a Prefijas...nn";
cout <<"Entre Expresion Infija : ";
cin >>infija;
iniciarpila(&auxiliar);
iniciarpila(&intermedia);
iniciarpila(&prefija);
for(i = 0;infija[i];i++)
meter(&auxiliar,infija[i]);
while(!pilavacia(&auxiliar)){
sacar(&auxiliar,c);
if(c == ')'){
meter(&intermedia,c);
}else if(c == '('){
while(cima(&intermedia) != ')'){
sacar(&intermedia,c);
meter(&prefija,c);
}
sacar(&intermedia,c);
}else if(operador(c)){
prioridadCima = prioridad(cima(&intermedia));
prioridadOper = prioridad(c);
while(!pilavacia(&intermedia) && (prioridadOper < prioridadCima)){
sacar(&intermedia,d);
meter(&prefija,d);
prioridadCima = prioridad(cima(&intermedia));
}
meter(&intermedia,c);
}else
meter(&prefija,c);
}
while(!pilavacia(&intermedia)){
sacar(&intermedia,c);
meter(&prefija,c);
}
cout <<"nExpresi¢n Prefija : ";
while(!pilavacia(&prefija)){
sacar(&prefija,c);
cout<<c;
}
cout<<"nnContinuar.? S/N : "; op = getch();
}while(toupper(op) != 'N');
}

/************************************/
int prioridad(char signo){
/************************************/
int r;
switch(signo){
case ')' : r = 0; break;
case '(' : r = 0; break;
case '+' : r = 1; break;
case '-' : r = 1; break;
case '*' : r = 2; break;
case '/' : r = 2; break;
case '^' : r = 3; break;
}
return r;
}

/************************************/
char cima(pila *p){
/************************************/
return p->infor[p->tope];
}

/************************************/
int operador(char signo){
/************************************/
int i,encontrado = 0;
char c[5] = {'+','-','*','/','^'};
for(i=0;i<5 && !encontrado;i++)
if(signo == c[i])
encontrado = 1;
return encontrado;
}

/************************************/
void iniciarpila(pila *p) {
/************************************/
p->tope = -1;
}

/************************************/
int pilavacia(pila *p) {
/************************************/
return p->tope == -1;
}

/************************************/
int pilallena(pila *p) {
/************************************/
return p->tope == maxpila -1;
}

/************************************/
void meter(pila *p,char dato) {
/************************************/
if(!pilallena(p)){
p->tope++;
p->infor[p->tope] = dato;
}else
cout<<"nPila Llena...";
}

/************************************/
void sacar(pila *p,char &dato) {
/************************************/
if(!pilavacia(p)){
dato = p->infor[p->tope];
p->tope--;
}else
cout<<"nPila Vacia...";
}