Ciao a tutti!
Ho un problema con un esercizio sugli stack. L'esercizio chiede di creare due stack , A e B; uno da cui prelevare elementi (A), uno in cui inserire elementi (B). Nel caso in cui lo stack A sia vuoto devono venire spostati, mediante pop-push gli elementi dallo stack B allo stack A.
Il problema sta nell'inserimento di elementi nello stack B, quindi credo nella funzione stack_push, riporto l'intero codice per completezza, spero qualcuno possa aiutarmi, grazie.
codice:#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> #define GROW_DELTA 10 #define SHRINK_DELTA 20 typedef int TInfo; struct SArray{ TInfo *item; int length; int size; }; typedef struct SArray TArray; struct SStack{ TArray array; }; typedef struct SStack TStack; TArray array_create(int initial_length){ TArray a; a.item=(TInfo*)malloc(sizeof(TInfo)*initial_length); assert(a.item!=NULL); a.length=initial_length; a.size=initial_length; } void array_destroy(TArray *a){ free(a->item); a->item=NULL; a->length=0; a->size=0; } void array_resize(TArray *a,int new_length){ if(new_length > a->size || new_length < a->size -SHRINK_DELTA){ int new_size=new_length+GROW_DELTA; a->item=realloc(a->item, sizeof(TInfo)*new_size); assert(a->item!=NULL || new_size!=0); a->size=new_size; } a->length=new_length; } TStack stack_create(void){ TStack s; s.array=array_create(0); return s; } void stack_destroy(TStack *s){ array_destroy(&s->array); } void stack_push(TStack *s, TInfo x){ int n=s->array.length; array_resize(&s->array, n+2); s->array.item[n]=x; } TInfo stack_pop(TStack *s){ int n=s->array.length; TInfo x=s->array.item[n-1]; array_resize(&s->array, n-1); return x; } TInfo stack_top(TStack *s){ int n=s->array.length; return s->array.item[n-1]; } bool stack_is_empty(TStack *s){ return s->array.length==0; } int menu(){ printf("\n1) Inserire un elemento.\n"); printf("2) Prelievo di un elemento.\n"); printf("3) Verifica coda vuota.\n"); printf("4) EXIT.\n\n"); printf("Fai la tua scelta : "); } int main(){ TStack stackA,stackB; int scelta=0; TInfo elemento; stackA=stack_create(); stackB=stack_create(); printf("----> %d", stackB.array.length); while(scelta!=4){ menu(); scanf("%d", &scelta); switch(scelta){ case 1 : printf("Inserire il nuovo elemento :\n"); scanf("%d", &elemento); stack_push(&stackB, elemento); break; case 2 : if(stack_is_empty(&stackA)){ while(stackB.array.length!=0) stack_push(&stackA , stack_pop(&stackB)); elemento=stack_pop(&stackA); printf("ELEMENTO %d \n", elemento); } else { elemento=stack_pop(&stackA); printf("%d \n", elemento); } break; case 3 : break; } } return EXIT_SUCCESS; }

Rispondi quotando