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