DAS5102 - Pilhas - Exemplo em C
De Aulas
Links relacionados: DAS5102 Fundamentos da Estrutura da Informação
Observações
Aconselho fortemente a tentar criar a sua própria lógica e seu próprio programa antes de olhar os código prontos.
Arquivo pilha.c
1#include "pilha.h"
2
3typedef struct no No;
4
5struct no
6{
7 int info;
8 No* proximo;
9};
10
11struct pilha
12{
13 No* topo;
14 int tamanho;
15};
16
17Pilha* pilha_criar()
18{
19 Pilha* p = malloc (sizeof(Pilha));
20 p->tamanho = 0;
21 p->topo = NULL;
22 return p;
23}
24
25int pilha_vazia(Pilha* p)
26{
27 return (p->topo == NULL);
28}
29
30int pilha_get_tamanho(Pilha* p)
31{
32 return p->tamanho;
33}
34
35void pilha_inserir(Pilha* p, int valor)
36{
37 No* n = malloc (sizeof(No));
38 n->info = valor;
39 n->proximo = p->topo;
40 p->topo = n;
41 p->tamanho++;
42}
43
44int pilha_retirar(Pilha* p)
45{
46 if (pilha_vazia(p))
47 {
48 return 0;
49 }
50 No* aux = p->topo;
51 p->topo = p->topo->proximo;
52 p->tamanho--;
53 int aux_info = aux->info;
54 free(aux);
55 return aux_info;
56}
Arquivo pilha.h
1#ifndef PILHA_H_INCLUDED
2#define PILHA_H_INCLUDED
3
4#include <stdlib.h>
5
6typedef struct pilha Pilha;
7
8Pilha* pilha_criar();
9int pilha_vazia(Pilha* p);
10int pilha_get_tamanho(Pilha* p);
11void pilha_inserir(Pilha* p, int valor);
12int pilha_retirar(Pilha* p);
13
14#endif // PILHA_H_INCLUDED
Arquivo main.c
1#include <stdio.h>
2#include <stdlib.h>
3#include "pilha.h"
4
5int main()
6{
7 int i;
8 Pilha* p = pilha_criar();
9 for (i = 0; i < 1000; i++)
10 {
11 int info = i * 10;
12 pilha_inserir(p, info);
13 }
14 for (i = 0; i < 1000; i++)
15 {
16 if (!pilha_vazia(p))
17 {
18 printf("Elemento da pilha %d\n", pilha_retirar(p));
19 }
20 else
21 {
22 printf("Pilha vazia...\n");
23 }
24 }
25 return 0;
26}