72> ADT simulato di uno stack mediante un array
primitive:
void push(element, stack);
element pop(stack);
boolean isEmpty(stack);
boolean isFull(stack);
int Top(stack);
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define DIM 5
void push(int []);
int pop(int []);
void visualizza(int []);
void clear(int []);
int isEmpty(int []);
int isFull(int []);
int main()
{
	int v[DIM]={1,2,3,4,5},scelta,res1,res2;
	scelta=0;
	srand(time(NULL));
	while(1){
		printf("0>esc\n");
		printf("1>inserisci elemento\n");
		printf("2>estrai elemento\n");
		printf("3>svuota stack\n");
		printf("4>visualizza stack\n");
		printf("5>verifica stack vuota\n");
		printf("6>verifica stack piena\n");
		printf("Scelta: ");
		scanf("%d",&scelta);
		putchar('\n');
		switch(scelta){
			case 0:
				return 0;
			break;
			case 1:
				push(v);
			break;
			case 2:
				printf("estratto elemento: %d\n\n",pop(v));
			break;
			case 3:
				clear(v);
			break;
			case 4:
				visualizza(v);
			break;
			case 5:
				res1=isEmpty(v);
				if(res1==1){
					printf("stack vuota\n\n");
				}else
				{
					printf("stack non vuota\n\n");
				}
			break;
			case 6:
				res2=isFull(v);
				if(res2==1){
					printf("stack piena\n\n");
				}else
				{
					printf("stack non piena\n\n");
				}
			break;
			default:
				printf("errore\n\n");
			break;
		}
	}
	
	return 0;
}
void push(int v[DIM]){
	//inserisci nel primo elemento della stack, perci� l'ultimo va perso
	int i;
	for(i=DIM-1;i>=0;i--){
		v[i]=v[i-1];
	}
	v[0]=rand()%9+1;
	printf("elemento random aggiunto in stack\n\n");
}
int pop(int v[DIM]){
	//estrai l'ultimo elemento della stack --> il primo elemento sar� a 0 per indicare la cella vuota
	int i,temp;
	temp=v[DIM-1];
	for(i=DIM-1;i>=0;i--){
		v[i]=v[i-1];
	}
	v[0]=0;
	return temp;
}
void visualizza(int v[DIM]){
	int i;
	for(i=DIM-1;i>=0;i--){
		printf("%d\n",v[i]);
	}
	putchar('\n');
}
void clear(int v[DIM]){
	//0 = cella vuota
	int i;
	for(i=0;i<DIM;i++){
		v[i]=0;
	}
	printf("stack svuotata\n\n");
}
int isEmpty(int v[DIM]){
	int i,flag;
	flag=0;
	for(i=0;i<DIM;i++){
		if(v[i]!=0){
			flag=1;
		}
	}
	if(flag==0){
		return 1;
	}else
	{
		return 0;
	}
}
int isFull(int v[DIM]){
	int i,flag;
	flag=0;
	for(i=0;i<DIM;i++){
		if(v[i]==0){
			flag=1;
		}
	}
	if(flag==0){
		return 1;
	}else
	{
		return 0;
	}
}

    
  
072.c