Codigo Lista Doble

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 6

using System;

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 int Ligader


{
get { return ligader; }
set { ligader = value; }
}

private int ligaizq;

public int Ligaizq


{
get { return ligaizq; }
set { ligaizq = value; }
}

private string id;

public string Id
{
get { return id; }
set { id = value; }
}

private string nombreProd;

public string NombreProd


{
get { return nombreProd; }
set { nombreProd = value; }
}

private string descripcion;

public string Descripcion


{
get { return descripcion; }
set { descripcion = value; }
}

private int ndisco;

public int Ndisco


{
get { return ndisco; }
set { ndisco = value; }
}

private int totalDiscos;

public int TotalDiscos


{
get { return totalDiscos; }
set { totalDiscos = value; }
}

private int idCategoria;

public int IdCategoria


{
get { return idCategoria; }
set { idCategoria = value; }
}

private string proyectos;

public string Proyectos


{
get { return proyectos; }
set { proyectos = value; }
}

public NodoDoble()
{
Id = ""; NombreProd = ""; Descripcion = "";
Ndisco = 0; TotalDiscos = 0; IdCategoria = 0;
Proyectos = "";

Ligader = -1;
Ligaizq = -1;
}

public class ListaDoble


{
private int tamano;

public int Tamano


{
get { return tamano; }
set { tamano = value; }
}

private int actual;

public int Actual


{
get { return actual; }
set { actual = value; }
}

private int inicio;

public int Inicio


{
get { return inicio; }
set { inicio = value; }
}

private int final;

public int Final


{
get { return final; }
set { final = value; }
}

private NodoDoble miNodo;

public ListaDoble()
{
Tamano = 0;
Inicio = -1;
Actual = -1;
Final= -1;
}

public bool Agregar(NodoDoble miInfo)


{
bool regreso = false;

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;
}

public NodoDoble Anterior()


{
miNodo = null;
if (Tamano > 0)
{
if (Actual != -1)
{
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
if (miNodo.Ligaizq != -1)
{
Actual = miNodo.Ligaizq;
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
}
}
}
return miNodo;
}

public NodoDoble Siguiente()


{
miNodo = null;
if (Tamano > 0)
{
if (Actual != -1)
{
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
if (miNodo.Ligader != -1)
{
Actual = miNodo.Ligader;
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
}
}
}
return miNodo;
}

public NodoDoble Fin()


{
miNodo = null;
if (Actual != Final)
{
Actual = Final;
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
}
return miNodo;
}

public NodoDoble Iniciar()


{
miNodo = null;
if (Actual != Inicio)
{
Actual = Inicio;
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
}
return miNodo;
}

public bool Borrar()


{
//Cuando lo que queremos borrar esta al principio
bool regreso = false;
//Borrar al principio
if (Actual == Inicio)
{
//Leo el nodo que antes era el inicio
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Inicio);
//Guardo en una variable la posición que ahoran es inicio
int temp = miNodo.Ligader;

if (temp != -1) //Hay más de un elemento


{
//Leo el nodo que ahora es el Inicio
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(temp);
//Modifico la liga izquierda ya que ahora tiene que apuntar a nada
miNodo.Ligaizq = -1;
//Guardo en la memoria
MemoriaRAM.GuardarDatos(miNodo, temp);
//Libero la posición que antes era el inicio
MemoriaRAM.LiberarEspacio(Inicio);
//Digo cual es mi posición de inicio
Inicio = temp;
//Digo en cual registro estoy
Actual = Inicio;
regreso = true;
Tamano--;
}
else
{
Tamano = 0;
Inicio = -1;
MemoriaRAM.LiberarEspacio(Actual);
Actual = -1;
Final = -1;
regreso = true;
}
}//Borrar al inicio

if ((Actual == Final) && (regreso==false)) // Estoy y voy a borrar el final


{
//Leo el nodo que antes era el Final
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Final);
//Guardo en una variable la posición que ahoran es inicio
int temp = miNodo.Ligaizq;
if (temp != -1) //Hay más de un elemento
{
//Leo el nodo que ahora es el Final
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(temp);
//Modifico la liga izquierda ya que ahora tiene que apuntar a nada
miNodo.Ligader = -1;
//Guardo en la memoria
MemoriaRAM.GuardarDatos(miNodo, temp);
//Libero la posición que antes era el inicio
MemoriaRAM.LiberarEspacio(Final);
//Digo cual es mi posición de inicio
Final = temp;
//Digo en cual registro estoy
Actual = Final;
regreso = true;
Tamano--;
}
else
{
Tamano = 0;
Inicio = -1;
MemoriaRAM.LiberarEspacio(Actual);
Actual = -1;
Final = -1;
regreso = true;
}

}//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;
}

public NodoDoble RegresaActual()


{
miNodo = null;
if (Actual != -1)
{
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
}
return miNodo;
}

public bool Modificar(NodoDoble nodoinfo)


{
bool regreso = false;
if (Actual != -1)
{
miNodo = (NodoDoble)MemoriaRAM.LeerNodo(Actual);
nodoinfo.Ligader = miNodo.Ligader;
nodoinfo.Ligaizq = miNodo.Ligaizq;
MemoriaRAM.GuardarDatos(nodoinfo, Actual);
regreso = true;
}
return regreso;
}

}
}

También podría gustarte