Académique Documents
Professionnel Documents
Culture Documents
TRABAJO DE INVESTIGACION
ARBOLES AVL
ASIGNATURA:
ESTRUCTURA DE DATOS
DOCENTE:
ALUMNO:
CUSCO-PERU
2017
Presentación
Ing. Mora Jiménez Ramiro docente del curso ESTRUCTURA DE DATOS; el
trabajo de investigación que presento a continuación está enfocado a las
arboles AVL”.
En este trabajo se realizó con el motivo de dar a conocer sobre las listas
doblemente enlazadas, a mis compañeros docente etc.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class ListaDoble
{
class nodo
{
public int codigo;
public string nombre;
public string ap;
public string am;
public string cp;
public nodo siguiente;
public nodo anterior;
}
private nodo raiz;
public ListaDoble()
{
raiz = null;
}
public int cantidad()
{
int cant = 0;
nodo reco = raiz;
while (reco != null)
{
reco = reco.siguiente;
cant++;
}
Console.WriteLine(cant);
return (cant);
}
void insertar(int pos, int x, string nombre, string ap, string am, string cp)
{
if (pos <= cantidad() + 1)
{
nodo nuevo = new nodo();
nuevo.codigo = x;
nuevo.nombre = nombre;
nuevo.ap = ap;
nuevo.am = am;
nuevo.cp = cp;
if (pos == 1)
{
nuevo.anterior = null;
nuevo.siguiente = raiz;
raiz = nuevo;
}
else
if (pos == cantidad() + 1)
{
nodo recorrido = raiz;
while (recorrido.siguiente != null)
{
recorrido = recorrido.siguiente;
}
recorrido.siguiente = nuevo;
nuevo.siguiente = null;
nuevo.anterior = recorrido;
}
else
{
nodo recorrido = raiz;
for (int f = 1; f <= pos - 1; f++)
{
recorrido = recorrido.siguiente;
}
recorrido.siguiente = nuevo;
nuevo.siguiente = null;
nuevo.anterior = recorrido;
}
}
else
{
Console.WriteLine("no se puede insertar");
}
}
public void imprimir()
{
nodo recorrido = raiz;
while (recorrido != null)
{
Console.Write(recorrido.codigo + ".- " + recorrido.nombre + " " + recorrido.ap + " " +
recorrido.am + " : " + recorrido.cp + " ");
Console.WriteLine();
recorrido = recorrido.siguiente;
}
Console.WriteLine();
}
void ordenar()
{
nodo min = raiz;
nodo p1 = raiz;
nodo p2 = raiz;
nodo aux = raiz;
while (p1.siguiente != null)
{
p2 = p1.siguiente;
min = p1;
while (p2 != null)
{
if (p2.codigo < min.codigo)
{
min = p2;
}
p2 = p2.siguiente;
}
if (p1 != min)
{
intercambiar(p1.codigo, min.codigo);
aux = p1;
p1 = min;
min = aux;
}
p1 = p1.siguiente;
}
}
void intercambiar(int pos1, int pos2)
{
nodo posicion1 = raiz;
while (posicion1.codigo != pos1)
posicion1 = posicion1.siguiente;
nodo posicion2 = raiz;
while (posicion2.codigo != pos2)
posicion2 = posicion2.siguiente;
nodo Anterior2 = posicion2.anterior;
nodo aux = posicion2.siguiente;
if (raiz != posicion1)
{
nodo Anterior1 = posicion1.anterior;
if (posicion1.siguiente == posicion2)
{
Anterior1.siguiente = posicion2;
posicion2.anterior = Anterior1;
posicion1.siguiente = posicion2.siguiente;
posicion1.anterior = posicion2;
posicion2.siguiente = posicion1;
}
else
{
Anterior1.siguiente = posicion2;
posicion2.anterior = Anterior1;
posicion2.siguiente = posicion1.siguiente;
posicion1.siguiente.anterior = posicion2;
Anterior2.siguiente = posicion1;
posicion1.anterior = Anterior2;
posicion1.siguiente = aux;
if (aux != null)
aux.anterior = posicion1;
}
}
else
{
if (posicion1.siguiente == posicion2)
{
raiz = posicion2;
posicion2.anterior = null;
posicion1.siguiente = posicion2.siguiente;
if (aux != null)
aux.anterior = posicion1;
raiz.siguiente = posicion1;
posicion1.anterior = raiz.siguiente;
}
else
{
raiz = posicion2;
posicion2.anterior = null;
posicion2.siguiente = posicion1.siguiente;
posicion1.siguiente.anterior = posicion2;
Anterior2.siguiente = posicion1;
posicion1.anterior = Anterior2;
posicion1.siguiente = aux;
if (aux != null)
aux.anterior = posicion1;
}
}
}
public void Eliminar(string Valor)
{
nodo DatoELimar = raiz;
while (DatoELimar.nombre != Valor && DatoELimar.siguiente != null)
{ DatoELimar = DatoELimar.siguiente; }
if (raiz != null)
{
nodo Anterior = raiz;
while (Anterior.siguiente != DatoELimar && Anterior != DatoELimar)
{ Anterior = Anterior.siguiente; }
if (DatoELimar == Anterior)
{
raiz = raiz.siguiente;
}
else
if (DatoELimar.siguiente != null)
{
Anterior.siguiente = DatoELimar.siguiente;
}
else
{
Anterior.siguiente = null;
}
}
}
static void Main(string[] args)
{
string determinante, nmbre, Ap, Am, Cp;
ListaDoble ld = new ListaDoble();
int c = 1, w = 1, valor, u = 1;
while (c > 0)
{
ld.imprimir();