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