home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
CataniaB
/
teach-act
/
laboratorio
/
lab-19-4-99
/
ese8b.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-13
|
2KB
|
99 lines
/* tipo di dato stack di interi:
in questa versione, lo stack e' una struttura, composta da un array di interi
e dall'indice della prima posizione libera.
Lo stack viene passato alle funzioni come parametro. Le operazioni sono
implementate come funzioni.
In genere non e' buona prassi restituire una struttura come risultato di una
funzione (potrebbe essere molto grande). E' spesso piu' conveniente restituire
un puntatore alla struttura. Provare.
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
struct tstack{
char stack[MAX];
int sp;
} ;
/* operazioni sullo stack */
struct tstack emptystack(void);
int isempty(struct tstack); /* determina se lo stack e' vuoto */
struct tstack push(int,struct tstack); /* aggiunge in testa */
struct tstack pop(struct tstack); /* toglie elemento in testa */
int top(struct tstack); /* restituisce elemento in testa */
void print(struct tstack);
main()
{
struct tstack st;
/* costruisco lo stack che contiene i seguenti elementi:
1 5 6 3 8 (questa e' la testa) */
st = emptystack();
st = push(8,push(3,push(6,push(5,push(1,st)))));
/* stampo lo stack */
print(st);
/*rimuovo la testa e stampo il nuovo stack*/
st=pop(st);
print(st);
/* rimuovo altri due elementi e stampo elemento in testa*/
st=pop(st);
st=pop(st);
printf("\nElemento in testa: %d",top(st));
return 0;
}
struct tstack emptystack(void)
{
struct tstack st;
st.sp = 0;
return st;
}
int isempty(struct tstack mystack)
{
return mystack.sp == 0 ;
}
struct tstack push(int el,struct tstack mystack)
{
if (mystack.sp < MAX)
mystack.stack[mystack.sp++] = el;
else
printf("\n\nerrore:stack pieno \n\n");
return mystack;
}
struct tstack pop(struct tstack mystack)
{
if (mystack.sp > 0)
--mystack.sp;
return mystack;
}
int top(struct tstack mystack)
{
return mystack.stack[mystack.sp -1];
}
void print(struct tstack mystack)
{
int i;
printf("\nQuesto e' lo stack: ");
for(i = 0; i < mystack.sp ; i++)
printf("%d ",mystack.stack[i]);
printf("\n");
}