Pila C

Solo disponible en BuenasTareas
  • Páginas : 3 (511 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de octubre de 2012
Leer documento completo
Vista previa del texto
#include<stdio.h>
#include<stdlib.h>

/*Definicion de Tipo */
typedef char Elem;
typedef struct Nodo
{ Elem info;
struct Nodo *sig;
} *Pila ;

/* Prototipos de Pila */Pila empty ();
Pila push(Elem e, Pila p);
int isempty(Pila p);
Elem top(Pila p);
Pila pop(Pila p);

/* Prototipos para Imprimir */
void impElem(Elem e);
void impPila(Pila p);/*Prototipos*/
int cuenta(Pila );
Pila Pega(Pila ,Pila );
Pila Invierte(Pila );
Pila insord(Elem,Pila );
int esmenor(Elem,Elem);
int esmayor(Elem,Elem);
Pila ordena(Pila );
int esdig(char);
intesletra (char);
int izq(Elem);
int der(Elem);
int prec(Elem);
/*************************************************/

int main (int argc, char *argv[]){

// Pila operador;

int i=0;
char*s=*(argv+1);
/* while(s[i]!='\0')
printf("%c\n",s[i++]);
*/

/*
Pila operador=empty();
while(s[i]!='\0')
{
if(esletra(s[i])||esdig(s[i]))
impElem(s[i++]);
elseoperador=push(s[i++],operador);
}

ImpPila (operador);
puts(*++argv);
*/

Pila in=empty();

while(s[i]!='\0')
{
if(esletra(s[i])||esdig(s[i]))
impElem(s[i++]);
else if(izq(s[i]))in=push(s[i++],in);
else if(der(s[i]))
{
while(!izq(top(in)))
{
impElem(top(in));
in=pop(in);
}
in=pop(in);
i++;
}
else if(isempty(in))in=push(s[i++],in);
else if(izq(top(in)))
in=push(s[i++],in);
else if(esmayor(prec(s[i]),prec(top(in))))
in=push(s[i++],in);
else
{
while(!esmayor(s[i],prec(top(in))))
{impElem(top(in));
in=pop(in);
}
}
in=push(s[i++],in);
}

impPila(in);

return 0;
}

/*************************************************/

Pila empty ()
{
return NULL;}

Pila push(Elem e, Pila p)
{
Pila temp=(Pila )malloc(sizeof(struct Nodo));
temp->info=e;
temp->sig=p;
return temp;
}

int isempty(Pila p){
return p==NULL;
}

Elem...
tracking img