C, Inserimento - Rappresentazione sequenziale delle pile

di il
9 risposte

C, Inserimento - Rappresentazione sequenziale delle pile


#define MaxPila 100
typedef int TipoElemPila;

struct tipoPila{
	
	TipoElemPila pila[MaxPila];
	int pos;
};

typedef struct tipoPila TipoPila;

//Per la pila vuota: p.pos viene scelta pari a -1
void InitPila(TipoPila *p);
void Inserimento(TipoPila *p, int n);
void Stampa(TipoPila p, int n);
bool TestPilaPiena(TipoPila p);

int main()
{
   TipoPila P;
	
	InitPila(&P);
	
	Inserimento(&P, 5);
	
	Stampa(P, 5);

}

void InitPila(TipoPila *p)
{
	p -> pos = - 1;
}

void Inserimento(TipoPila *p, int n)
{
	if(TestPilaPiena(*p))
	{
		printf("Pila piena!");
		return;
	}
	int i;
	for(i = 0; i < n; i++)
	{
		printf("p->pila[%d]: ", p->pos); 
		scanf("%d", &p->pila[p->pos]); 
		p->pos++;
	}
}

void Stampa(TipoPila p, int n)
{
	int i;
	p.pos = -1;
	for(i = 0; i < n; i++)
	{
		printf("[%d]", p.pila[p.pos]);
		p.pos++;
	}
}

bool TestPilaPiena(TipoPila p)
{
	if(p.pos == MaxPila - 1)
		return true;
	return false;
}
Quando eseguo, questo è quello che accade:

p->pila[-1]: 1
p->pila[0]: 2
p->pila[1]: 3
p->pila[2]: 4
p->pila[3]: 5

Stampa:
[0][2][3][4][5]


1) Perché nella stampa il primo elemento è 0 e non 1 (come dovrebbe essere)?

2) Cambiando typedef int TipoElemPila; in typedef char TipoElemPila; nonostante nello scanf cambi %d con %c ecco cosa accade:

p->pila[-1]: 1
p->pila[0]: p->pila[1]: 2
p->pila[2]: p->pila[3]: 3


Non mi fa inserire i valori correttamente. Perché?

Invece se mettessi %s nell scanf e %c nella stampa:

p->pila[-1]: a
p->pila[0]: b
p->pila[1]: c
p->pila[2]: d
p->pila[3]: e

Stampa:
[][c][d][e]

Sempre lo stesso problema..

9 Risposte

Devi accedere o registrarti per scrivere nel forum
9 risposte