-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRBPile.java
More file actions
117 lines (98 loc) · 2.63 KB
/
RBPile.java
File metadata and controls
117 lines (98 loc) · 2.63 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
package redblackpile;
import exceptions.PilhaVaziaException;
public class RBPile {
int totalSize;
Object[] mainPile;
int redTop;
int blackTop;
public RBPile(int totalSize) {
this.totalSize = totalSize;
mainPile = new Object[totalSize];
redTop = -1;
blackTop = totalSize;
}
public void mimDaAPilaMano() {
System.out.printf("[ ");
for(int i=0; i<totalSize; i++ ) {
if (i==totalSize-1) {
System.out.printf("%s ", mainPile[i]);
}else {
System.out.printf("%s, ", mainPile[i]);
}
}
System.out.printf("], ");
System.out.printf("capacidade: %d. ", totalSize);
if (isRedEmpty()) System.out.printf("red tá vazia e"); else System.out.printf("redTop é \"%s\" (%d itens) e", redTop(), redSize());
if (isBlackEmpty()) System.out.printf(" black tá vazia.%n"); else System.out.printf(" blackTop é \"%s\" (%d itens) %n", blackTop(), blackSize());
}
public void redPush(Object x) {
if (redTop+1 == blackTop) {
Object[] auxPile = new Object[totalSize*2];
for (int i=0; i<=redTop; i++) {
auxPile[i] = mainPile[i];
}
for (int i=blackTop; i<totalSize; i++) {
auxPile[i+totalSize] = mainPile[i];
}
mainPile = auxPile;
blackTop += totalSize;
totalSize *= 2;
}
redTop++;
mainPile[redTop] = x;
}
public Object redPop() {
if (redTop < 0) {
throw new PilhaVaziaException("Não dá pra popar a pinha vermelha, está vazia");
}
redTop--;
return mainPile[redTop+1];
}
public Object redTop() {
if (redTop < 0) {
throw new PilhaVaziaException("Não há topo na pinha vermelha, está vazia");
}
return mainPile[redTop];
}
public boolean isRedEmpty() {
if (redTop < 0) return true; else return false;
}
public int redSize() {
return redTop+1;
}
public void blackPush(Object x) {
if (blackTop-1 == redTop) {
Object[] auxPile = new Object[totalSize*2];
for (int i=0; i<=redTop; i++) {
auxPile[i] = mainPile[i];
}
for (int i=blackTop; i<totalSize; i++) {
auxPile[i+totalSize] = mainPile[i];
}
mainPile = auxPile;
blackTop += totalSize;
totalSize *= 2;
}
blackTop--;
mainPile[blackTop] = x;
}
public Object blackPop() {
if (blackTop > totalSize-1) {
throw new PilhaVaziaException("Não dá pra popar a pilha preta, está vazia");
}
blackTop++;
return mainPile[blackTop-1];
}
public Object blackTop() {
if (blackTop > totalSize-1) {
throw new PilhaVaziaException("Não há topo na pinha preta, está vazia");
}
return mainPile[blackTop];
}
public boolean isBlackEmpty() {
if (blackTop < totalSize) return false; else return true;
}
public int blackSize() {
return totalSize - blackTop;
}
}