Codigo Lista Doble
Codigo Lista Doble
Codigo Lista Doble
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utags.Cuartof.Estructuras.Utilerias;
namespace Utags.Grupof.Estructuras.ListasD
{
public class NodoDoble
{
private int ligader;
public string Id
{
get { return id; }
set { id = value; }
}
public NodoDoble()
{
Id = ""; NombreProd = ""; Descripcion = "";
Ndisco = 0; TotalDiscos = 0; IdCategoria = 0;
Proyectos = "";
Ligader = -1;
Ligaizq = -1;
}
public ListaDoble()
{
Tamano = 0;
Inicio = -1;
Actual = -1;
Final= -1;
}
if (MemoriaRAM.Disponibles > 0)
{
//Saber si es el primer elemento
// de la lista
if (Tamano == 0)
{
//Buscar posición disponible en
//la memoria RAM
int pos = MemoriaRAM.AsignarDireccion();
MemoriaRAM.GuardarDatos(miInfo, pos);
Tamano++;
Inicio = pos;
Final = pos;
Actual = pos;
regreso = true;
}
else
{
//No es el primer elemento
//Leo el que era el último elemento
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Final);
int temp = Final;
Final = MemoriaRAM.AsignarDireccion();
miInfo.Ligaizq = temp;
//Guardamos el nodo nuevo
MemoriaRAM.GuardarDatos(miInfo, Final);
miNodo.Ligader = Final;
MemoriaRAM.GuardarDatos(miNodo, temp);
Tamano++;
Actual = Final;
regreso = true;
}
}
return regreso;
}
}//Borrar al final
if (Actual != Inicio && Actual != Final && regreso == false && Actual != -1)
{//Estoy entre inicio y final
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
int posizq = miNodo.Ligaizq;
int posder = miNodo.Ligader;
//Modifico la liga derecha del nodo anterior
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(posizq);
miNodo.Ligader = posder;
MemoriaRAM.GuardarDatos(miNodo,posizq);
//Modifico nodo siguiente
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(posder);
miNodo.Ligaizq = posizq;
MemoriaRAM.GuardarDatos(miNodo,posder);
MemoriaRAM.LiberarEspacio(Actual);
Actual = posizq;
regreso = true;
Tamano--;
}
return regreso;
}
}
}