Implementação de Lista Autorreferenciada em C#
Classified in Technology
Written on in
English with a size of 2.47 KB
Listas Autorreferenciadas
Exemplo de implementação de uma lista autorreferenciada (lista simplesmente encadeada) em C# utilizando nó sentinela (cabeça):
public class ListaRef {
private class Celula {
public Object item;
public Celula prox;
}
private Celula primeiro, ultimo, pos;
// Operações
public ListaRef() { // Cria uma Lista vazia
this.primeiro = new Celula();
this.pos = this.primeiro;
this.ultimo = this.primeiro;
this.primeiro.prox = null;
}
public Object pesquisa(Object chave) {
if (this.vazia() || chave == null)
return null;
Celula aux = this.primeiro;
while (aux.prox != null) {
if (aux.prox.item.Equals(chave))
return aux.prox.item;
aux = aux.prox;
}
return null;
}
public void insere(Object x) {
this.ultimo.prox = new Celula();
this.ultimo = this.ultimo.prox;
this.ultimo.item = x;
this.ultimo.prox = null;
}
public Object retira(Object chave) {
if (this.vazia() || (chave == null))
throw new Exception("Erro: Lista vazia ou chave inválida");
Celula aux = this.primeiro;
while (aux.prox != null && !aux.prox.item.Equals(chave))
aux = aux.prox;
if (aux.prox == null)
return null; // não encontrada
Celula q = aux.prox;
Object item = q.item;
aux.prox = q.prox;
if (aux.prox == null)
this.ultimo = aux;
return item;
}
public Object retiraPrimeiro() {
if (this.vazia())
throw new Exception("Erro: Lista vazia");
Celula aux = this.primeiro;
Celula q = aux.prox;
Object item = q.item;
aux.prox = q.prox;
if (aux.prox == null)
this.ultimo = aux;
return item;
}
public Object Primeiro() {
this.pos = primeiro;
return proximo();
}
public Object proximo() {
this.pos = this.pos.prox;
if (this.pos == null)
return null;
else
return this.pos.item;
}
public bool vazia() {
return (this.primeiro == this.ultimo);
}
public void imprime() {
Celula aux = this.primeiro.prox;
while (aux != null) {
Console.Write(aux.item.ToString() + " ");
aux = aux.prox;
}
}
}