Edizione didattica italiana
Pila in C: struttura LIFO
Implementa push e pop controllando capacità e stato vuoto.

L’ultimo elemento inserito è il primo estratto. Con un array, top indica la cima oppure un valore convenzionale per la pila vuota. Mantieni la stessa convenzione in tutte le operazioni.
Prima di push controlla la capacità; prima di pop o peek verifica che esista un elemento. Se possibile separa lo stato di errore dal valore restituito, evitando ambiguità.
Le operazioni fondamentali costano O(1). Prova riempimento, svuotamento e alternanza. Le pile servono ad annullare azioni, analizzare espressioni e rappresentare chiamate in attesa.
Codice sorgente
#include <stdio.h>
#define MAX 100
typedef struct {
int items[MAX];
int top;
} Stack;
void initStack(Stack *s) { s->top = -1; }
int isFull(Stack *s) { return s->top == MAX - 1; }
int isEmpty(Stack *s) { return s->top == -1; }
void push(Stack *s, int val) {
if (isFull(s)) {
printf("Stack Overflow!\n");
return;
}
s->items[++(s->top)] = val;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack Underflow!\n");
return -1;
}
return s->items[(s->top)--];
}
int peek(Stack *s) {
if (isEmpty(s)) return -1;
return s->items[s->top];
}
int main() {
Stack s;
initStack(&s);
push(&s, 10);
push(&s, 20);
push(&s, 30);
printf("Top element: %d\n", peek(&s));
printf("Popped: %d\n", pop(&s));
printf("New top: %d\n", peek(&s));
return 0;
}Apri nel compilatoreRisultato atteso
Top element: 30 Popped: 30 New top: 20
Domande frequenti
Perché il codice e alcuni risultati restano in inglese?
Parole chiave C, identificatori, commenti del programma e output attesi restano quelli originali per preservare codice eseguibile e test coerenti. Spiegazioni e istruzioni sono tradotte.