|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
[c] stack con array
salve a tutti m devo sviluppare uno stack statico con array, in cui ogni elemento contiene una stringa, quindi uso un array di puntatori a char. Solo che ogni volta che tolgo un elemento sembra che contanga na stringa indefinita. Vi posto lo stack:
Codice:
#define MAX 1000 #define EMPTY -1 #define FULL (MAX - 1) /*questo è lo stack con l'array di "stringhe"*/ typedef struct stack{ char *s[MAX]; int top; } stack; /*funzioni*/ void reset(stack *stk) { stk -> top = EMPTY; } void push(char *string, stack *stk) { int TOP; TOP = stk -> top++; stk -> s[TOP] = calloc(8, sizeof(char)); strcpy(stk -> s[TOP], string); } char *pop(stack *stk) { return (stk -> s[stk -> top--]); } char *top(stack *stk) { return (stk -> s[stk -> top]); } int empty(stack *stk) { /*restituisce 1 se vuoto*/ return (stk -> top == EMPTY); } int full(stack *stk) { /*restituisce 1 se è pieno*/ return (stk -> top == FULL); } Codice:
stack stk; char temp[8]; reset(&stk); push("casa", &stk); push("mare", &stk); /*non voglio perdere il valore tolto*/ strcpy(temp, pop(&stk)); printf("%s\n", temp); printf("%s\n", pop(&stk));
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Io credo che l'errore sia nel push, mi sembra, ma non sono sicuro, che l'istruzione
Codice:
TOP = stk -> top++; |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
in effetti si, al primo push fai un buffer underflow...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
edit..nulla, ora sembra funzionare...grazie..ma mi rifarò sentire
![]()
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread Ultima modifica di gepeppe : 10-11-2007 alle 12:13. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
vabbè..ci rinuncio!! di nuovo non funziona!!! forse è sbagliata come implementazione dello stack con array. Vi allego il sorgente del file dello stack, basta provatelo e vedrete che non va..ma non riesco proprio a capire il motivo....la cosa più strana, è che dopo l'istruzione reset, che inizializza top a -1, quando richiamo il push inizia da zero, poi incrementa, va a 1, e quindi inizia a salvare dal posto 1..provare per credere!!!
![]()
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:31.