-
Notifications
You must be signed in to change notification settings - Fork 0
/
PilhaVetor.cs
83 lines (67 loc) · 1.91 KB
/
PilhaVetor.cs
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
using apCaminhosMarte;
using System;
public class PilhaVetor<Dado> : IStack<Dado> where Dado : IComparable<Dado>
{
Dado[] P;
int topo;
int posicoes;
const int MAXIMO = 500;
public PilhaVetor(int posic)
{
posicoes = posic;
P = new Dado[posicoes];
topo = -1;
}
public PilhaVetor() : this(MAXIMO)
{
}
public void Empilhar(Dado elemento)
{
if (Tamanho() == posicoes)
throw new PilhaCheiaException("Overflow - pilha cheia");
topo++;
P[topo] = elemento;
}
public Dado Desempilhar()
{
if (EstaVazia())
throw new PilhaVaziaException("Underflow - pilha vazia");
Dado elemento = P[topo];
P[topo] = default(Dado);
topo--;
return elemento;
}
public Dado OTopo()
{
if (EstaVazia())
throw new PilhaVaziaException("Underflow - pilha vazia");
Dado elemento = P[topo];
return elemento;
}
public bool EstaVazia()
{
return topo < 0;
}
public int Tamanho()
{
return topo + 1;
}
// Método Copia, adaptado da correção da prova, utilizado no Projeto no Evento Click do botão Busca, na busca de caminhos,
// para armazenar todos os caminhos numa pilha auxiliar que não altere a pilha original ou a afete,
// deixando-a intacta para múltiplos usos.
public PilhaVetor<Dado> Copia()
{
PilhaVetor<Dado> retPilha = new PilhaVetor<Dado>();
PilhaVetor<Dado> aux = new PilhaVetor<Dado>();
Dado temp;
while (!this.EstaVazia())
aux.Empilhar(this.Desempilhar());
while (!aux.EstaVazia())
{
temp = aux.Desempilhar();
this.Empilhar(temp);
retPilha.Empilhar(temp);
}
return retPilha;
}
}