****** I did this Exercise, but in the element count of the stack, the value of items is not appearing. Could you help me please ****
#include <stdio.h>
#include <stdlib.h>
/*
Um elemento da Pilha tem a chave, (e outros campos se necessarios)
e o endereco(ponteiro) do elemento debaixo na pilha.
*/
typedef struct ITEM_PILHA{
int chave;
float val;
struct ITEM_PILHA *ant;
}ITEM_PILHA;
/*
@criaElem: Aloca memoria dinamicamente para um registro(item)
de uma pilha
*/
ITEM_PILHA *criaElem(int valor, float v){
ITEM_PILHA *aux;
aux = (ITEM_PILHA *)malloc( sizeof(ITEM_PILHA) ); //aloca um novo elemento
if(!aux) //verifica se nao ha memoria suficiente
return(NULL); //devolve um ponteiro nulo
aux->chave = valor; //inicializa o novo elemento da fila
aux->val = v;
aux->ant = NULL;
return(aux);
}
//@Insere: insere um elemento sempre no topo da pilha (PUSH)
ITEM_PILHA *insere(ITEM_PILHA *topo, int valor, float v){
ITEM_PILHA *aux;
aux = criaElem(valor, v);
if(!aux){
printf(" Erro de alocacao de memoria\n");
}
else {
aux->ant = topo; //liga o novo a pilha
topo = aux; //move o topo p o novo elemento
}
return topo;
}
/*
@POP: remove elemento do topo da pilha
*/
ITEM_PILHA *removeElem(ITEM_PILHA *topo){ //remove um elemento da pilha
ITEM_PILHA *aux;
if( !topo ){ //se estiver vazia mostra mensagem
printf("\nPilha Vazia.\n");
getchar();
} else {
printf("Removendo: %d\n", topo->chave);
getchar();
aux = topo; //guarda o topo para liberar depois da memoria
topo = topo->ant; //o topo recebe o de baixo (anterior)
free(aux); //libera o item da pilha da memória
}
return topo;
}
//imprimir todos os elementos da pilha
void imprime(ITEM_PILHA *topo){
ITEM_PILHA *aux;
if( !topo ){ //se estiver vazia mostra mensagem
printf("\nPilha Vazia.\n");
getchar();
}
else{
for(aux = topo; aux != NULL; aux = aux->ant)
printf("%d \n",aux->chave);
}
getchar();
getchar();
}
//devolver o numero de itens na pilha
int contaElementos(ITEM_PILHA *topo){
if(topo==NULL)
return 0;
else{
return (1 + contaElementos(topo->ant));
}
}
void buscar(ITEM_PILHA *topo, int valor){
ITEM_PILHA *aux = topo;
int achou = 0;
while(aux!=NULL){
if(aux->chave == valor)
achou = 1;
aux = aux->ant;
}
if(achou)
printf("Encontrado \n");
else
printf(" Nao Encontrado \n");
getchar();
getchar();
}
void main(){
ITEM_PILHA *topo=NULL; //cria a pilha vazia
char opcao; //opcao do menu
int chave; //valor a ser inserido pelo usuario
float v;
do{
system("cls");
printf("Opcoes:\n |1|-Inserir Elemento \n |2|-Remover Elemento \n |3|-Imprimir\n|4|-Buscar |5|Contar Elementos |6| Sair\n");
scanf("%c", &opcao);
switch(opcao){
case '1':
system("cls");
printf("\nValor:");
scanf("%d", &chave);
printf("\nV:");
scanf("%f", &v);
topo = insere(topo, chave, v);
fflush(stdin);
break;
case '2':
topo = removeElem(topo);
break;
case '3':
imprime(topo);
break;
case '4':
printf("\nValor para buscar:");
scanf("%d", &chave);
buscar(topo, chave);
break;
case '5':
printf("\nElementos: %d", contaElementos(topo));
system("pause");
break;
case '6':
exit(0);
}
// getchar();
}while(opcao);
getchar();
}