-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDuasPilhas.c
More file actions
118 lines (90 loc) · 2.12 KB
/
Copy pathDuasPilhas.c
File metadata and controls
118 lines (90 loc) · 2.12 KB
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
#include <stdio.h>
#define TAM 10
void push(int *topo, int valor, int P[]);
void imprimir_pilha(int P[], int topo);
void push_ordenado_P3(int P1[], int P2[], int P3[], int *topo1, int *topo2, int *topo3);
int pop(int *topo, int P[]);
int main(){
int P1[TAM] = {0}, P2[TAM] = {0}, P3[TAM] = {0};
int topo1 = 0, topo2 = 0, topo3 = 0;
push(&topo1, 8, P1);
push(&topo1, 4, P1);
push(&topo1, 1, P1);
push(&topo2, 9, P2);
push(&topo2, 7, P2);
push(&topo2, 6, P2);
push(&topo2, 2, P2);
printf("------P1-------\n");
imprimir_pilha(P1, topo1);
printf("------P2-------\n");
imprimir_pilha(P2, topo2);
printf("topo 1: %i\n", topo1);
printf("topo 2: %i\n", topo2);
printf("topo 3: %i\n", topo3);
push_ordenado_P3(P1, P2, P3, &topo1, &topo2, &topo3);
printf("------P1-------\n");
imprimir_pilha(P1, topo1);
printf("------P2-------\n");
imprimir_pilha(P2, topo2);
printf("------P3-------\n");
imprimir_pilha(P3, topo3);
printf("topo 1: %i\n", topo1);
printf("topo 2: %i\n", topo2);
printf("topo 3: %i\n", topo3);
return 0;
}
void push(int *topo, int valor, int P[]){
if(*topo < TAM){
P[*topo] = valor;
(*topo)++;
}
else{
printf("Lista cheia!\n");
}
}
void imprimir_pilha(int P[], int topo){
for(int i = 0; i < topo; i++){
printf("P[%i] = %i\n", i, P[i]);
}
}
void push_ordenado_P3(int P1[], int P2[], int P3[], int *topo1, int *topo2, int *topo3){
int vetor[TAM], j = 0;
for(int i = *topo1; i > 0; i--)
push(topo3, pop(topo1, P1), P3);
for(int i = *topo2; i > 0; i--)
push(topo3, pop(topo2, P2), P3);
for(int i = *topo3; i > 0; i--){
vetor[j] = pop(topo3, P3);
j++;
}
int posicao = 0, aux;
for(int i = 0; i < j - 1; i++){
int maior = vetor[i];
for(int y = i + 1; y < j; y++){
if(vetor[y] > maior){
maior = vetor[y];
posicao = y;
}
}
if(maior != vetor[i]){
aux = vetor[i];
vetor[i] = vetor[posicao];
vetor[posicao] = aux;
}
}
for(int i = 0; i < j; i++){
push(topo3, vetor[i], P3);
}
}
int pop(int *topo, int P[]){
int removido;
if(*topo >= 0){
removido = P[*topo - 1];
P[*topo - 1] = 0;
(*topo)--;
}
else{
printf("Pilha vazia");
}
return removido;
}