Ir ao conteúdo
  • Cadastre-se

Nobara

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

3
  1. Funcionou! Que outros erros você está mencionando? Mesmo o código funcionando, queria saber para melhorar. Depois que o usuário seleciona uma das opções do menu e a função é feita, o programa encerra.
  2. Estou tentando fazer uma pilha alocada dinamicamente em C mas ele não está funcionando direito, não consigo enxergar onde está o erro. Não julgue muito meu código, ainda sou iniciante. <#include <stdio.h> #include <stdlib.h> typedef struct elemento{ int valor; struct elemento *anterior; }Elemento; typedef struct pilha{ Elemento *topo; }Pilha Pilha* criaPilha (); void liberaPilha (Pilha* p); int tamanho (Pilha* p); int empilha (Pilha* p, int v); int desempilha (Pilha* p); int estahvazia (Pilha* p); int main(){ Pilha *a; a = criaPilha(); int x = 1, y; do{ printf("---------------------------------\n"); printf(" ~~~~MENU~~~~\n"); printf("1. Inserir um elemento na pilha\n"); printf("2. Retirar um elemento da pilha\n"); printf("3. Tamanho da pilha\n"); printf("0. Sair\n"); printf("Opcao: "); scanf("%d", &x); printf("---------------------------------\n"); switch(x){ case 1: printf("Elemento que deseja inserir: "); scanf("%d", &y); empilha(a, y); printf("Elemento inserido!!\n\n"); break; case 2: if(estahvazia(a) == 1) printf("Pilha vazia :(\n"); else{ desempilha(a); printf("Primeiro elemento da pilha retirado!!\n\n"); } break; case 3: printf("Quantidade de elementos na pilha: %d\n\n", tamanho(a)); break; default: printf("Opcao invalida\n"); break; } }while(x != 0); liberaPilha(a); return 0; } Pilha* criaPilha (){ Pilha *p; p = (Pilha*) malloc(sizeof(Pilha)); if(p == NULL){ printf("Erro: memoria insuficiente\n"); system("pause"); exit(1); } p -> topo == NULL; return p; } void liberaPilha (Pilha* p){ while(estahvazia(p) != 1){ Elemento *aux; aux = p -> topo; p -> topo = p -> topo -> anterior; free(aux); } free(p); } int tamanho (Pilha* p){ int soma = 0; Elemento *aux; aux = p -> topo; while(aux != NULL){ soma++; aux = aux -> anterior; } return soma; } int estahvazia (Pilha* p){ if(p == NULL) return 1; if(p -> topo == NULL) return 1; else return 0; } int empilha (Pilha* p, int v){ Elemento *aux; aux -> valor = v; aux -> anterior = p -> topo; p -> topo = aux; return 1; } int desempilha (Pilha* p){ if(estahvazia(p) == 1) return 0; Elemento *aux; aux = p -> topo; p -> topo = aux -> anterior; free(aux); return 1; }>

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!