DAS5102 - Pilhas - Exemplo em C

De Aulas
Revisão de 15h26min de 26 de novembro de 2016 por Admin (discussão | contribs) (Substituição de texto - "<code c>" por "<syntaxhighlight lang=c line>")
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

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}