Mostrando las entradas con la etiqueta concatenar. Mostrar todas las entradas
Mostrando las entradas con la etiqueta concatenar. Mostrar todas las entradas

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;
}


Suma y promedio de una lista

20.8 Escriba un programa para insertar 25 enteros aleatorios de 0 a 100 en orden, en un objeto lista enlazada. El programa deberá calcular la suma de los elementos y el promedio de punto f lotante de los elementos.
 

/*
* C++ Suma y promedio de una lista simple
*
*/
 
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
struct nodo{
       int nro;        // en este caso es un numero entero
       struct nodo *sgte;
};
 
typedef struct nodo *Tlista,*Tlista2;
 
Tlista inicio, fin;
Tlista2 inicio2,fin2;
 
void generarLista( Tlista &inicio, Tlista &fin, int n ) 
{
     Tlista q, t;
     Tlista r, s;
     
     for(int i=0; i<n; i++)
     {
         q = new(struct nodo);
         q->nro = rand()%100;
         
         r = new(struct nodo);
         r->nro = q->nro;
         
         if(inicio==NULL)
         {
              q->sgte = inicio;
              inicio  = q;
              fin     = q; 
         }
         else
         {
              q->sgte   = fin->sgte;
              fin->sgte = q;
              fin       = q;
         }
     }
     
     cout<<"\n\n\tLista de numeros generados... "<<endl;
}
  
 
void reportarLista(Tlista inicio)
{
     
     while(inicio != NULL)
     {
          cout << inicio->nro<<"  " ;
          inicio = inicio->sgte;
     }
 
}
 
void ordenarLista(Tlista lista)
{
     Tlista actual , siguiente;
     int t;
     
     actual = lista;
     while(actual->sgte != NULL)
     {
          siguiente = actual->sgte;
          
          while(siguiente!=NULL)
          {
               if(actual->nro > siguiente->nro)
               {
                    t = siguiente->nro;
                    siguiente->nro = actual->nro;
                    actual->nro = t;          
               }
               siguiente = siguiente->sgte;                    
          }    
          actual = actual->sgte;
          siguiente = actual->sgte;
           
     }
}
 
int suma( Tlista inicio )
{
    int suma = 0;
    while( inicio )
    {
        suma = suma + inicio->nro;
        inicio = inicio->sgte;
    }
    return suma;
}

/*                        Funcion Principal
------------------------------------------------------------------*/
 
int main()
{
    inicio = NULL;
    fin    = NULL;
    float sumar;
 
    system("color 0b");
    
    generarLista( inicio, fin, 25 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );  
    sumar = suma( inicio ); 
    cout<<"\n\nsuma= "<<sumar<<"  promedio= "<<sumar/25<<"\n\n\n";      
    
 
   system("pause");
   
   return 0;
}

Ordenar y combinar listas


20.7.Escriba un programa para combinar dos objetos de lista ordenada de enteros en un solo objeto de lista ordenada de enteros. La función combinar debe recibir referencias a cada uno de los objetos lista que se van a combinar, y debe devolver una referencia a objeto lista en el que se colocarán los elementos combinados.

/*
* C++ - Ordenar y combinar numeros en una lista enlazada simple
*dev c++ ver 4.9.2 , usar cstdlib para versiones mayores
*/
 
#include <iostream>
 
using namespace std;
 
struct nodo{
       int nro;        // en este caso es un numero entero
       struct nodo *sgte;
};
 
typedef struct nodo *Tlista,*Tlista2;
 
Tlista inicio, fin;
Tlista2 inicio2,fin2;
 
void generarLista( Tlista &inicio, Tlista &fin, int n ) 
{
     Tlista q;
     
     for(int i=0; i<n; i++)
     {
         q = new(struct nodo);
         q->nro = rand()%30;
         if(inicio==NULL)
         {
              q->sgte = inicio;
              inicio  = q;
              fin     = q; 
         }
         else
         {
              q->sgte   = fin->sgte;
              fin->sgte = q;
              fin       = q;
         }
     }
     
          inicio = inicio->sgte;
     }
 
}
 
void ordenarLista(Tlista lista)
{
     Tlista actual , siguiente;
     int t;
     
     actual = lista;
     while(actual->sgte != NULL)
     {
          siguiente = actual->sgte;
          
          while(siguiente!=NULL)
          {
               if(actual->nro > siguiente->nro)
               {
                    t = siguiente->nro;
                    siguiente->nro = actual->nro;
                    actual->nro = t;          
               }
               siguiente = siguiente->sgte;                    
          }    
          actual = actual->sgte;
          siguiente = actual->sgte;
           
     }
}
 
void concatenar(Tlista &inicio, Tlista &inicio2)
{
 Tlista aux = inicio;
 while(aux->sgte)
 {
  aux = aux->sgte;
 }
 aux->sgte = inicio2;
}
 
/*                        Funcion Principal
------------------------------------------------------------------*/
 
int main()
{
    inicio = NULL;
    fin    = NULL;
    inicio2 = NULL;
    fin2    = NULL;
 
    system("color 0b");
    
    generarLista( inicio, fin, 4 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );        
    
    generarLista( inicio2, fin2, 5 );
    ordenarLista( inicio2 );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio2 ); 
    
    concatenar( inicio , inicio2 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );
 
   system("pause");
   
   return 0;
}

Concatenar listas


20.6.Escriba un programa para concatenar dos objetos de lista enlazada de caracteres. El programa deberá incluir la función concatenar, que reciba referencias a ambos objetos lista como argumentos y que concatene la segunda lista con la primera.


/* C++  Programa que concatena listas
** 
**@autor: Cristian Quezada & Lucero Polo
**/

#include 

using namespace std;

struct nodo{
       char nom;
       struct nodo *sig;
};

nodo *inicio, *fin;
nodo *inicio2, *fin2;

nodo *generarLista( nodo *inicio,  int n ) //genero una lista aleatoria
{
     nodo *q;
     
     for(int i=0; i<n; i++)
   {
         q = new nodo;
         q->nom = (char)(70+i);
         
         if(inicio==NULL)
         {
              q->sig = inicio;
              inicio  = q;
              fin     = q;        
         }
         else
         {
              q->sig   = fin->sig;
              fin->sig = q;
              fin       = q;
         }
     }
     return inicio;
}




void mostrarLista(nodo *inicio)        //imprime listas
{    
    while(inicio != NULL)
    {
            cout<nom<<"   ";
            inicio=inicio->sig;
    }
 
}


nodo *generarLista2( nodo *inicio, int n ) 
{
     nodo *q , *inicio2 , *fin2;
     inicio2 = NULL;
     fin2    = NULL;
     
     for(int j=0; j<n; j++)
    {
         q = new nodo;
         q->nom = (char)(60+j);
         if(inicio2==NULL)
         {
              q->sig = inicio2;
              inicio2  = q;
              fin2     = q;        
         }
         else
         {
              q->sig   = fin2->sig;
              fin2->sig = q;
              fin2      = q;
         }
     }
     return inicio2;
}

nodo *concatenar(nodo *inicio , nodo *inicio2)
{
 nodo *aux = inicio;
 while(aux->sig)
 {
  aux = aux->sig;
 }
 aux->sig = inicio2;
 return inicio;
}
 
/*                        Funcion Principal
------------------------------------------------------------------*/
 

int main()
{
    inicio = NULL;
    inicio2 = NULL;
    
    system("color 0b");
 
    inicio=generarLista( inicio, 6 );
    
    cout<<"\n\n LISTA:\n\n";
    
    mostrarLista( inicio );

    inicio2=generarLista2( inicio , 6 );
    
    cout<<"\n\n LISTA 2:\n\n";
    
    mostrarLista( inicio2 );
    
    inicio=concatenar( inicio , inicio2);
    
    cout<<"\n\n LISTA 2:\n\n";
    
    mostrarLista( inicio );  cout<<"\n\n\n";

   system("pause");
   
   return 0;
}