PDA

View Full Version : [C] Simulazione di uno stack


k_mishima
02-06-2007, 18:35
Ciao devo simulare lo stack in c con allocazione statica e dinamica, statica l'ho fatto, dinamica mi da 1 errore che non riesco a risolvere.

#include <stdio.h>
#include <stdlib.h>
void pushs(int *, int **, int *);
void pops(int *);
main()
{
int *x,*scelta,*a,*temp;
short i;

x=(int *)malloc(sizeof(int));
scelta=(int *)malloc(sizeof(int));
temp=(int *)malloc(sizeof(int));

puts("Simulazione di una Pila (Stack)");
puts("Inserire il numero di elementi della pila (max 30)");
scanf("%d", x);

a=(int *)calloc(*x,sizeof(int));
puts("Inserire gli elementi della pila");
for(i=0;i<*x;i++)
{
printf("%d-esimo elemento:",i);
scanf("%d", a+i);
}

puts("\nPila:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}

puts("\n\nPossibili operazioni:\n");
do
{
puts("\n[1] Inserire un nuovo elemento");
puts("[2] Cancella un vecchio elemento");
puts("[3] Terminare programma");
scanf("%d", scelta);
if(*scelta == 1)
{
//Inserimento di un elemento in una pila(Stack)
puts("Quale elemento vuoi inserire?");
scanf("%d", temp);

pushs(temp, &a, x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
}
else if(*scelta == 2)
{
//Eliminazione di un elemento dalla pila(stack)
pops(x);
puts("\nQuesto e' il nuovo array:");
for(i=0;i<*x;i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
}
while (*scelta!=3);
free(a);
free(scelta);
free(x);
free(temp);
system("pause");
}

void pushs(int *elem, int **a, int *n)
{
(*a)=(int *)realloc((*a),sizeof(int));
(*a)[n]=elem;
n+=1;
}

void pops(int *n)
{
(*n)--;
}


L'errore è array subscript is not an integer, nel codice la riga è segnata in nero.
La parte sul pop funziona.

P.s. ma non ci sono function già fatte per le pile?

71104
02-06-2007, 19:05
infatti ha ragione il compilatore: quella n non è un intero, è un puntatore a un intero :P

scrivi così: (*a)[*n] = elem;

e stai attento che n sia un puntatore valido.

k_mishima
03-06-2007, 12:48
:D

che errore stupido, vabbè, ora provo grazie