PDA

Visualizza la versione completa : [C] Pila


matteolandi
29-05-2004, 17:53
ciao

che cosa è e come si implementa una pila in c?

grazie

Luc@s
29-05-2004, 18:02
La pila è una particolare lista in cui l'inserimento e la cancellazione è consentita solo ad una estremità. Questa gestione è anche chiamata LIFO (Last In First Out), in quanto l'ultimo elemento inserito è il primo ad essere estratto. L'estremità della lista in cui è consentito l'inserimento e l'estrazione è chiamata top o cima.
Sia data una pila composta dagli elementi a1, a2, a3, …., an e si supponga che la cima sia rappresentata dalla posizione del primo elemento a1. L'inserimento di un elemento x produce la nuova pila x, a1, a2, a3, …., an. La nuova cima della PILA diviene la posizione di x. La cancellazione della cima ripristina la pila iniziale a1, a2, a3, …., an.





#define N 10
#define PILAVUOTA -1

typedef int tipobase;
typedef char boolean;

struct stack {
tipobase info[N];
int top;
} ;

void MakeNull(stack *s)
{
s->top=PILAVUOTA;
}


boolean Empty(stack *s)
{
return(s->top==PILAVUOTA);
}

boolean Full(stack *s)
{
return(s->top==N-1);
}

void Push(stack *s, tipobase x)
{
if (!Full(s)) {
s->top++;
s->info[s->top]=x;
}
}

void Pop(stack *s)
{
if (!Empty(s))
s->top--;
}

tipobase Top(stack *s)
{
if (!Empty(s))
return(s->info[s->top]);
}




:ciauz:

matteolandi
29-05-2004, 18:14
Grazie 1000 Luc@s, vedo che hai usato solo elementi base del linguaggio, quindi suppongo che il c non abbia dei tipi o delle funzionalità specifiche per gestire le pile...

un'ultima cosa, ma se provassi ad utilizzare lo stack con l'asm inline, sarebbe + effic.???

PS spero di non avere detto qualche cavolata

ciao

Ikitt
29-05-2004, 18:20
Originariamente inviato da matteolandi
Grazie 1000 Luc@s, vedo che hai usato solo elementi base del linguaggio, quindi suppongo che il c non abbia dei tipi o delle funzionalità specifiche per gestire le pile...

Esatto, il C ha un nucleo di base molto compatto, per tipi di dati astratti quali pile/code/liste occorre usare librerie apposite o programmaseli...



un'ultima cosa, ma se provassi ad utilizzare lo stack con l'asm inline, sarebbe + effic.???

A priori si puo` solo dire che
"l'ottimizzazione prematura e` la radice di ogni male" -- Donald Knuth ;)

Luc@s
29-05-2004, 18:25
Originariamente inviato da matteolandi

un'ultima cosa, ma se provassi ad utilizzare lo stack con l'asm inline, sarebbe + effic.???


Prima fallo funzionare e poi perfezionalo............. questo è quello che dice Linus Torvalds...... :gren:

matteolandi
29-05-2004, 18:35
ottimi consigli!!

ciao e grazie

Loading