jueves, 2 de julio de 2015

Listas palindromas

20.11 Escriba un programa que utilice un objeto pila para determinar si una cadena es una palíndroma (es decir, que la cadena se deletree en forma idéntica, tanto al revés como al derecho). El programa debe ignorar espacios y puntuación.

#include <iostream>
using namespace std;
struct nodo
{
 char dato;
 struct nodo *sig;
};

void inicializar(nodo **cab)
{
 *cab = NULL;
}

void push(nodo **cab , char nuv)
{
 nodo *q;
 q = new nodo;
 q->dato = nuv;
 if(*cab == NULL)
 {
  q->sig = *cab;
  *cab = q;
 }
 else
 {
  q->sig = *cab;
  *cab = q;
 }
}

char pop(nodo **cab)
{
 nodo *aux;
 char num;
 aux = *cab;
 if(aux)
 {
  num = aux->dato;
  *cab = (*cab)->sig;
  delete aux;
  return num;
 }
 else
 {
  return 0;
 }
}

int comparar(nodo *cab, nodo *cab2 , int n)
{
     int b = 1; 
     for(int i=0;i<n;i++)
     {
         if(cab->dato == cab2->dato)
         {
             cab = cab->sig;
             cab2 = cab2->sig;
         }
         else
             b = 0;
     }
     return b;
}

void mostrar(nodo *cab)
{
 while(cab)
 {
  cout<<cab->dato;
  cab = cab->sig;
 }
 cout<<"\n\n\n";
}

int main()
{
 nodo *cab , *cab2;
 inicializar(&cab);
 inicializar(&cab2);
    string palabra ="anita lava la.. tina";
 //cout<<" ingresa palabra:  ";
 //cin>>palabra;
 int cont=0;
 for(int i=(palabra.length()-1);i>=0;i--)
 {
            if(palabra[i] != ' ')
            {     if(palabra[i] != '.')
                    push(&cab , palabra[i]);
                  else
                      cont++;  }
            else
                cont++;
    }
    for(int i=0;i<palabra.length();i++)
 {
            if(palabra[i] != ' ')
            {     if(palabra[i] != '.')
                    push(&cab2 , palabra[i]);
                  else
                      cont++;  }
            else
                cont++;
    }
 cout<<comparar(cab , cab2, palabra.length()-cont)<<" '1 iguales , 0 diferentes'  \n";
    mostrar(cab2);
 mostrar(cab);
 
 system("pause");
 return 0;
}


No hay comentarios.:

Publicar un comentario