-
Notifications
You must be signed in to change notification settings - Fork 0
/
pilhaBiblioteca.c
85 lines (74 loc) · 1.74 KB
/
pilhaBiblioteca.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdlib.h>
#include <stdio.h>
#include "pilhaBiblioteca.h"
#include "util.c"
void FPVazia(TPilha *Pilha){
Pilha->topo = (TCelula *)malloc(sizeof(TCelula));
Pilha->fundo = Pilha->topo;
Pilha->topo->prox = NULL;
Pilha->tamanho = 0;
}
int PilhaVazia(TPilha Pilha){
return (Pilha.topo == Pilha.fundo);
}
void Empilhar(TProduto x, TPilha *Pilha){
TCelula* Aux;
Aux = (TCelula*)malloc(sizeof(TCelula));
Pilha->topo->item = x;
Aux->prox = Pilha->topo;
Pilha->topo = Aux;
Pilha->tamanho++;
}
void Desempilhar(TPilha *Pilha, TProduto *Item){
TCelula* aux;
if(PilhaVazia(*Pilha)){
printf("\nERRO: PILHA VAZIA\n");
return;
}
aux = Pilha->topo;
Pilha->topo = aux->prox;
*Item = aux->prox->item;
free(aux);
Pilha->tamanho--;
}
int PesquisarPilha(TPilha Pilha, TProduto x){
TPilha PAux;
TProduto item;
FPVazia(&PAux);
int result = 0;
while (!PilhaVazia(Pilha)){
Desempilhar(&Pilha, &item);
if(x.codigo == item.codigo){
result = 1;
}
Empilhar(item, &PAux);
}
while(!PilhaVazia(PAux)){
Desempilhar(&PAux, &item);
Empilhar(item, &Pilha);
free(&PAux.topo);
}
return result;
}
void ImprimirPilha(TPilha Pilha){
TPilha PAux;
TProduto item;
FPVazia(&PAux);
while (!PilhaVazia(Pilha)){
Desempilhar(&Pilha, &item);
ImprimirProduto(item);
Empilhar(item, &PAux);
}
while(!PilhaVazia(PAux)){
Desempilhar(&PAux, &item);
Empilhar(item, &Pilha);
free(&PAux.topo);
}
}
void LiberarPilha(TPilha *Pilha){
TProduto x;
while (!PilhaVazia(*Pilha)){
Desempilhar(Pilha, &x);
}
free(&Pilha->topo);
}