Vous êtes sur la page 1sur 12

UNIVERSIDAD ANDINA DEL CUSCO

TRABAJO DE INVESTIGACION

ARBOLES AVL

ASIGNATURA:

ESTRUCTURA DE DATOS

DOCENTE:

RAMIRO MORA JIMENEZ

ALUMNO:

 MIGUEL ANGEL MAYORGA USTO

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();

Console.Write("determinante (Insertar / Eliminar / Cambiar) : ");


determinante = Console.ReadLine();
if (determinante == "Insertar")
{
Console.Write("ingrese el codigo del estudiante : ");
valor = int.Parse(Console.ReadLine());
Console.Write("Nombre del estudiante : ");
nmbre = Console.ReadLine();
Console.Write("Apellido paterno : ");
Ap = Console.ReadLine();
Console.Write("Apellido materno : ");
Am = Console.ReadLine();
Console.Write("Escuela profecional : ");
Cp = Console.ReadLine();
ld.insertar(u, valor, nmbre, Ap, Am, Cp);
ld.ordenar();
u++;
c++;
}
if (determinante == "Eliminar")
{
Console.Write("ingrese el nombre que desea eliminar : ");
nmbre = Console.ReadLine();
ld.Eliminar(nmbre);
u--;
c++;
}
if (determinante == "Cambiar")
{
nodo datoCambiar = ld.raiz;
Console.Write("ingrese el nombre del cual desea cambiar los datos : ");
nmbre = Console.ReadLine();
while (datoCambiar.nombre != nmbre)
{
datoCambiar = datoCambiar.siguiente;
}
while (w != 0)
{
Console.Write("Que dato que quiere cambiar? (nombre/apellido
paterno/apellido materno/carrera profecional) : ");
determinante = Console.ReadLine();
if (determinante == "nombre")
{
Console.Write("Nuevo nombre : ");
nmbre = Console.ReadLine();
datoCambiar.nombre = nmbre;
w = 0;
}
if (determinante == "Apellido paterno")
{
Console.Write("Nuevo apellido paterno : ");
Ap = Console.ReadLine();
datoCambiar.ap = Ap;
w = 0;
}
if (determinante == "Apellido materno")
{
Console.Write("Nuevo apellido materno : ");
Am = Console.ReadLine();
datoCambiar.am = Am;
w = 0;
}
if (determinante == "Carrera profecional")
{
Console.Write("Nueva carrera profecional : ");
Cp = Console.ReadLine();
datoCambiar.cp = Cp;
w = 0;
}
else w++;
w = 0;
}
c++;
}
else c++;
Console.Clear();
c++;
}
Console.ReadKey();
}
}
}

Vous aimerez peut-être aussi