-
Notifications
You must be signed in to change notification settings - Fork 4
/
pilhaEstaticaPreDefinida.c
156 lines (125 loc) · 2.97 KB
/
pilhaEstaticaPreDefinida.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
Autor: Fabricio Andrade
Data: 10/01/20
Algoritmo: Pilha Estática com tamanho definido pelo programador
Obs1: Não são utilizados comandos de limpar tela
para evitar problemas com diferentes SO's
Obs2: inserir = push, remover = pop, pesquisar = search, exibir = display.
*/
#include <stdio.h>
#include <stdlib.h>
#define TAM 3 //define a quantidade de elementos
typedef struct{
int topo;
int dados[TAM];
}tipoPilha;
void inicializar(tipoPilha *pilha){
pilha->topo = -1;
}
int cheia(tipoPilha *pilha){
if(pilha->topo == TAM-1){
return 1;
}else{
return 0;
}
}
int vazia(tipoPilha *pilha){
if(pilha->topo == -1){
return 1;
}else{
return 0;
}
}
void inserir(tipoPilha *pilha, int valor){
if(cheia(pilha)==1){
printf("\nPilha cheia!\n");
}else{
pilha->topo++;
pilha->dados[pilha->topo] = valor;
printf("\n%d Inserido com sucesso!\n",valor);
}
}
void remover(tipoPilha *pilha){
if(vazia(pilha)==1){
printf("\nPilha vazia!\n");
}else{
printf("\n%d Removido com sucesso!\n",pilha->dados[pilha->topo]);
pilha->topo--;
}
}
void exibir(tipoPilha *pilha){
int posicao=pilha->topo;
printf("\n---Pilha atual---\n");
if(vazia(pilha)==1){
printf("Pilha vazia!\n");
}else{
while(posicao!=-1){
printf("\t%d\n",pilha->dados[posicao]);
posicao--;
}
}
}
void pesquisar(tipoPilha *pilha, int valor){
int posicao=pilha->topo;
int contador=0;
if(vazia(pilha)==1){
printf("Pilha vazia!\n");
}else{
while(posicao!=-1){
if(valor == pilha->dados[posicao]){
contador++;
}
posicao--;
}
printf("\nHouve %d ocorrencia(s) do valor %d\n",contador,valor);
}
}
void exibirTopo(tipoPilha *pilha){
if(vazia(pilha)==1){
printf("\nPilha vazia!\n");
}else{
printf("\nO valor do topo eh %d\n",pilha->dados[pilha->topo]);
}
}
int main()
{
tipoPilha pilha;
int opcao=-1;
int valor=0;
inicializar(&pilha);
while (opcao!=0){
valor=0;
exibir(&pilha);
printf("DIGITE 0 PARA SAIR\n");
printf("1: Inserir\n");
printf("2: Remover\n");
printf("3: Visualizar topo\n");
printf("4: Pesquisar\n");
scanf("%d",&opcao);
switch(opcao){
case 1:
printf("Digite um valor\n");
scanf("%d",&valor);
inserir(&pilha, valor);
break;
case 2:
remover(&pilha);
break;
case 3:
exibirTopo(&pilha);
break;
case 4:
printf("Digite um valor\n");
scanf("%d",&valor);
pesquisar(&pilha,valor);
break;
case 0:
printf("\nTchau! Ate a proxima\n");
break;
default:
printf("Opcao invalida!\n");
break;
}
}
return 0;
}