View Single Post
Old 25-05-2008, 20:49   #4
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Perchè usare tre pile quando ne basta una?

Codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct tagPila
{
    char c;
    struct tagPila *next;
} Pila;

Pila* NewNode(char c)
{
    Pila *n;

    n = (Pila *)malloc(sizeof(Pila));

    if( n == NULL )
        return NULL;

    n->c = c;
    n->next = NULL;

    return n;
}

Pila* Push(Pila *p, char c)
{
    Pila *nuovo;

    nuovo = NewNode(c);
    nuovo->next = p;

    return nuovo;
}

Pila* Pop(Pila *p, char *c)
{
    Pila *pRet;

    if ( !p )
        return NULL;

    *c = p->c;
    pRet = p->next;

    free(p);

    return pRet;
}

int Empty(Pila *p)
{
    if ( !p )
        return 1;
    else
        return 0;
}

int Palindroma(char *s)
{
    // LA FUNZIONE Palindroma PRENDE IN INGRESSO UNA STRINGA s.
    // RESTITUISCE 1 SE LA STRINGA s E' PALINDROMA, 0 ALTRIMENTI.
    // LA VERIFICA AVVIENE UTILIZZANDO LE PILE.

    int k = 0;
    Pila * P1 = NULL;
    char c;

    for(; *(s + k); k++)
    {
        P1 = Push(P1, *(s + k));
    }

    k = 0;
    while( !Empty(P1) )
    {
	P1 = Pop(P1, &c);
	if ( c != *(s + k) )
	    return 0;
	k++;
    }

    return 1;
}

int main(void)
{
    char *s = "abba";

    if ( Palindroma(s) )
        printf("La stringa %s e' palindroma\n", s);
    else
        printf("La stringa %s non e' palindroma\n", s);
}
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso