PDA

View Full Version : [C] Palindorma con stak


lucas87
02-04-2007, 08:40
Salve ho il seguente esercizio e l'ho implementato, ma non va. qualcuno mi da una mano?

grazie

/*Una parola o una frase palindroma può essere letta indifferentemente
da sinistra a destra o da destra a sinistra. Scrivere una funzione che
controlli se una data stringa è palindroma utilizzando una pila.*/




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

#define FULL 100
#define EMPTY 0

typedef char data;
typedef enum {false, true} boolean;


typedef struct elem{
data d;
struct elem *next;
};

typedef struct elem elem;

typedef struct stack{
int cnt;
elem *top;
};

typedef struct stack stack;

void inizializza(stack *stk);
void push(data d,stack *stk);
data pop(stack *stk);
data top(stack *stk);
boolean empty(const stack *stk);
boolean full(const stack *stk);
int palindroma(stack *stk,char *ptr);


int main(void){
stack s;
char str[]="anna";
if (palindroma(&s,&str)==1) printf("stringa %s palindroma\n",str);
else printf("stringa %s non palindroma\n",str);
system("PAUSE");
}


void inizializza(stack *stk){
stk->cnt=0;
stk->top=NULL;
}

void push(data d,stack *stk){
elem *p;
p=malloc(sizeof(elem));
p->d=d;
p->next=stk->top;
stk->top=p;
stk->cnt++;
}

data pop(stack *stk){
data d;
elem *p;

d=stk->top->d;
p=stk->top;
stk->top=stk->top->next;
stk->cnt--;
free(p);
return d;
}

data top(stack *stk){
return (stk->top->d);
}

boolean empty(const stack *stk){
return ((boolean) (stk->cnt==EMPTY));
}

boolean full(const stack *stk){
return ((boolean) (stk->cnt==FULL));
}

int palindroma(stack *stk,char *ptr)
{

char c;
int slen = strlen(ptr);
int len = slen/2;

while(len--) push(stk, *ptr++);

/* se s è una stringa dispari, salta il carattere centrale */
if (slen % 2) ptr++;

while(!empty(stk)) if (pop(stk) != *ptr++) return 0;

return 1;
}

cionci
02-04-2007, 09:47
Mi piace molto l'approccio che stai usando per imparare, il tuo modo di scrivere il codice è molto ben strutturato, complimenti ;)
Hai mai usato un debugger ? Con quale ambiente di sviluppo stai scrivendo il codice ?

lucas87
02-04-2007, 10:31
Per il debugger No, Uso il dev-C

cionci
02-04-2007, 10:37
Allora è il momento buono per imparare...purtroppo ora come ora non posso provare con Dev-C++...qui comunque c'è qualcosa: http://www.di.uniba.it/~lops/programmazione/C/Dev-C++%205.htm