viernes, 18 de marzo de 2011

Programa de evaluacion de una palabra palindroma

/*Autora:Camacho Bolaños Angelica Miriam.
Descripción: Programa que indica si una palabra es palindroma o no mediante estructura de datos*/
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

struct nodop { char palabra[15]; };
struct nodo { struct nodop pal; struct nodo *siguiente; };

typedef struct nodo *COLA;

struct nodoPILA { struct nodop pal2; struct nodoPILA *siguiente2; };

typedef struct nodoPILA *PILA;

void crear(COLA *inicio, COLA *final)
{
    (*inicio)=NULL;
    (*final)=NULL;
}

void crearPILA(PILA *inicio)
{
    (*inicio)=NULL;
}


int vacia(COLA inicio)

{
    if(inicio==NULL){
        return 1;
    }
    else
    {return 0;
    }
}

void ingresar(COLA *inicio, COLA *final, char palabra)
{
    COLA nuevo;
    nuevo=(COLA)malloc(sizeof(struct nodo));
    nuevo->pal.palabra[0]=palabra;
    nuevo->siguiente=NULL;
        if((*final)==NULL)
        {
            (*final)=nuevo;
            (*inicio)=nuevo;
        }
        else
        {
                     (*final)->siguiente=nuevo;
            (*final)=(*final)->siguiente;
        }
}


void ingresarPILA(PILA *inicio, char palabra)
{
    PILA nuevo;
    nuevo=(PILA)malloc(sizeof(struct nodoPILA));
    nuevo->pal2.palabra[0]=palabra;
    nuevo->siguiente2=NULL;
        if((*inicio)==NULL)
        {
            (*inicio)=nuevo;
        }
        else
        {
        nuevo->siguiente2=(*inicio);
        (*inicio)=nuevo;
        }
}


char mostrar(COLA *inicio, COLA *final)
{
    COLA q;
    char a;
    //printf("\n %f", (*inicio)->pal.palabra);
    a=(*inicio)->pal.palabra[0];
    if((*inicio)->siguiente==NULL)
    {
        free(*inicio);
        (*inicio)=NULL;
        (*final)=NULL;
    }
    else
    {
        q=(*inicio);
        (*inicio)=(*inicio)->siguiente;
        q->siguiente=NULL;
        free(q);
    }
    return a;
}
char mostrarPILA(PILA *inicio)
{
    PILA q;
    char b;
    b=(*inicio)->pal2.palabra[0];
    //printf("\nValor inicio = %f - palabra: %s ", (*inicio)->pal2.palabra);
    if((*inicio)->siguiente2==NULL)
    {
        free(*inicio);
        (*inicio)=NULL;
    }
    else
    {
        q=(*inicio);
        (*inicio)=(*inicio)->siguiente2;
        q->siguiente2=NULL;
        free(q);
    }
    return b;
}
void main()
{
    struct nodop pal;
    COLA inicio;
    COLA final;
    PILA inicio2;
    char a,b;
    int i,e,igual;
    igual=0;
    i=0;
    e=0;
    clrscr();
    crear(&inicio,&final);
    crearPILA(&inicio2);
    printf("\n\t Por favor ingrese la palabra que se va a evaluar: ");
    gets(pal.palabra);
    e=strlen(pal.palabra);
    do {
        a=pal.palabra[i];
        ingresar(&inicio,&final,a);
        ingresarPILA(&inicio2,a);
        i++;
    }
           while(i<e);
    while(!vacia(inicio) && igual==0)
    {
        a=mostrar(&inicio, &final);
        b=mostrarPILA(&inicio2);
        printf("\na = %c - b = %c", a, b);
        if(a!=b)
        igual=1;
    }
    if(igual==1){
        printf("\nEsta palabra no es palindrome");
    }
    else
    {printf("\nSi es palindrome");
    }
}

No hay comentarios:

Publicar un comentario