Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las estructuras son tipos definidos por el programador y son un conjunto de datos agrupados.
Supongamos que programamos una agenda telefónica. Desde luego, la agenda necesita guardar
mucha información, por lo que ya hemos pensado en usar arreglos. Pero también necesitamos
pensar en los datos que debe contener como:
Esto nos lleva a tener tres arreglos. Si necesitamos más datos, entonces más arreglos serán
necesarios. Al final es posible que sea un poco complicado administrar tantos arreglos y esto
reduce la flexibilidad de nuestro software.
Lo mejor sería poder agrupar esa información, de forma tal que solamente tengamos que
administrar un solo arreglo. La forma de poder agrupar la información es por medio del uso de
las estructuras.
Cuando creamos una estructura, definimos un nuevo tipo y adentro de este tipo podremos
colocar datos. Estos datos se conocen como campos. Cada campo está representado por una
variable, que puede ser de cualquier tipo. Luego que hemos terminado de definir la estructura
podemos crear variables de esta estructura y guardar la información que necesitemos en ellas.
Una lista está formada por una serie de elementos llamados nodos los cuales son objetos que
contiene como variable miembro un puntero asignado y variables de cualquier tipo para manejar
datos. El puntero sirve para enlazar cada nodo con el resto de nodos que conforman la lista.
De esto podemos deducir que una lista (lista) es una secuencia de nodos en el que cada nodo
esta enlazado o conectado con el siguiente (por medio del puntero mencionado anteriormente).
El primer nodo de la lista se denomina cabeza de la lista y el último nodo cola de la lista. Este
último nodo suele tener su puntero igualado a NULL Para indicar que es el fin de la lista.
En las listas de acuerdo a quién apunte su cabeza y cola y al tipo de nodo que implementa
(cuántos punteros tiene) se dividen en cuatro grandes tipos:
Las listas simplemente enlazadas, permiten recorrer la lista en un solo sentido y desde la cabeza
hasta la cola.
Las listas doblemente enlazadas, permiten el recorrido en dos direcciones, de la cabeza a la cola
y de la cola hacia la cabeza.
Las listas simplemente circulares, permiten el recorrido en una dirección, pero al llegar al
último nodo (cola) este se encuentra comunicado o enlazado a la cabeza, haciendo un anillo o
circulo si se representa gráficamente.
Las listas doblemente circulares, permiten el recorrido en ambas direcciones y la cabeza y cola
se encuentran conectadas en ambas direcciones.
La lista enlazada es una estructura de datos dinámica cuyos nodos suelen ser normalmente
registros y que tienen un tamaño fijo. Ahora bien suelen llamarse estructuras dinámicas porque
se crean y destruyen según se vayan necesitando. De este modo se solicita o libera memoria en
tiempo de ejecución del programa.
Las operaciones típicas de la lista incluyen: Crear la lista, verificar si está vacía, insertar
elementos, eliminar elementos, mostrar elementos.
La lista no tiene ninguna restricción en cuanto a dónde puede eliminar o agregar nodos y es
precisamente esta característica lo que la hace la estructura más versátil.
Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden
recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir de cualquier
nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a uno de los
extremos.
}
public Nodo Atrás //este es el que nos permite retornar en la lista
{
get { return atras; }
set { atras = value; }
}
}
class Lista // lista doble, que permite recorrerla desde el primero al ultimo nodo o viceversa
{
private Nodo primero = new Nodo(); //apuntara a la cabeza de la lista
private Nodo ultimo = new Nodo(); //apuntara a la cola de la lista
public Lista() // constructor que inicializa los nodos en nulo, mientras no este creada o no tenga ningun valor
{
primero = null;
ultimo = null;
}
/*Metodos para verificar que se este ejecutando correctamente la carga de valores en los nodos.
uno sera el que permitira recorrer la lista del primero al ultimo y la siguiente lo ejecuta al contrario*/
public void desplegarListaPU() //metodo para recorrer de Primero al Ultimo Nodo
{
Nodo actual = new Nodo();
actual = primero; //sirve para identificar al primer nodo como el actual
while(actual != null)
{
Console.WriteLine(" " + actual.Dato); //muestra en pantalla el dato que tiene el nodo actual
actual = actual.Siguiente;
}
}
public void desplegarListaUP ()//muestra la lista desde el ultimo nodo hasta el primero
{
Nodo actual = new Nodo();
actual = ultimo;
while(actual!= null)
{
Console.WriteLine(" " + actual.Dato); //muestra en pantalla el dato que tiene el nodo actual
actual = actual.Atras;
}
}
}
Una lista circular es una lista lineal en la que el último nodo a punta al primero. Esto se puede
hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una
lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier
dirección hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas
enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el
más usado para dirigir buffers para “ingerir” datos, y para visitar todos los nodos de una lista a
partir de uno dado.
class Nodo
{
private int dato;
private Nodo siguiente;
class Lista
{
//servira para crear una lista circular simple
private Nodo primero = new Nodo(); //donde inicia la lista
private Nodo ultimo = new Nodo(); // donde termina la lista
//este es el metodo que nos va a permitir desplegar en pantalla los datos de la lista circular
public void desplegarLista()
{
Nodo actual = new Nodo();
actual = primero;
if (actual!=null)
{
do
{
Console.WriteLine(" " + actual.Dato);
actual = actual.Siguiente;
}
while (actual != primero);//esto impide que se genere un bucle al recorrer el listado, por ello se
detiene al detectar el primer nodo
}
else
{
Console.WriteLine("\n La lista esta vacia");
}
}
l.desplegarLista();
Console.ReadLine();//solamente para que haga una pausa y ver el resultado en pantalla
}
PILAS (STACK)
Una pila (stack en inglés) es una estructura de datos de tipo LIFO (del inglés Last In First Out,
último en entrar, primero en salir) que permite almacenar y recuperar datos. Se aplica en
multitud de ocasiones en informática debido a su simplicidad y ordenación implícita en la propia
estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un
objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento
apilado.
En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto
apliado (denominado TOS, top of stack en inglés). La operación retirar permite la obtención de
este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con
anterioridad), que pasa a ser el nuevo TOS.
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre
una pila de platos, y una operación retirar a retirarlo.
class Nodo
{
private int dato;
private Nodo siguiente;
class Pila
{
private Nodo Primero = new Nodo();
public void InsertarNodo ()/* con este metodo logramos apilar los datos, siendoel primero el ultimo en salir*/
{
Nodo Nuevo = new Nodo();
Console.Write("Ingrese el dato que contendra el nuevo nodo");
Nuevo.Dato = int.Parse(Console.ReadLine()); //ingresa el valor dado por el usuario, a la variable dato
Nuevo.Siguiente = Primero; //
Primero = Nuevo;
Actual = Primero; //nos permite ubicar en donde esta el inicio de la pila o mejor dicho la cima, el nodo que
se encuentra arriba
if ( Primero != null)
{
while(Actual != null) //se ejecuta mientras actual no sea nulo, que si tenga datos
{
Console.WriteLine(" " + Actual.Dato);
Actual = Actual.Siguiente;
}
}
else
{
Console.WriteLine("\n La Pila se encuentra vacia"); //mensaje en caso no se tengan datos
}
}
}
p.InsertarNodo();
p.InsertarNodo();
p.InsertarNodo();
p.InsertarNodo();
p.InsertarNodo();
COLAS
Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que
la operación de inserción push se realiza por un extremo y la operación de extracción pop por el
otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer
elemento en entrar será también el primero en salir.
El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobús
está compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el
comienzo se extraerá un elemento cuando haya comprado el billete para su viaje, y si llega una
nueva persona con intención de usar el autobús, tendrá que colocarse al final y esperar que todos
los elementos situados antes que él abandonen la cola.
namespace Cola_funcionamiento
{
class Nodo
{
private int dato;
private Nodo siguiente;
class Cola
{
private Nodo Primero = new Nodo();
private Nodo Ultimo = new Nodo();
public Cola()
{
Primero = null;
Ultimo = null;
}
c.insertarNodo();
c.insertarNodo();
c.insertarNodo();
c.insertarNodo();
c.insertarNodo();