You are on page 1of 13

UNIDAD 3 ESTRUCTURAS LINEALES

3.1 LISTAS
Una lista es una coleccin de elementos llamados generalmente nodos. El orden entre los
nodos se establece por medio de enlaces o referencias a otros nodos.
Su representacin es la siguiente:
NODO
Informacin

Enlace

3.1.1 OPERACIONES BASICAS CON LISTAS


Las operaciones elementales que pueden realizarse en una lista enlazada son:

Insercin de un elemento: al inicio, al final de la lista, o, antes / despus de otro nodo


dado como referencia.
Borrado de un elemento: eliminar el primer nodo, el ltimo nodo, un nodo con informacin
X, el nodo anterior / posterior al nodo con informacin X.
Recorrido de la lista (consulta general).
Bsqueda de un elemento (consulta individual)

3.1.2 TIPOS DE LISTAS


Existen varios tipos de listas, entre ellos tenemos:
1. Listas Lineales (Listas y tablas)
2. Listas Enlazadas
3. Listas Enlazadas Simples
4. Listas Enlazadas Dobles
5. Listas Enlazadas Circulares
6. Listas Enlazadas Dobles-Circular
En esta unidad solo veremos los tres primeros tipos de listas enlazadas (simples, dobles y
circulares).

3.1.3 LISTAS SIMPLEMENTE ENLAZADAS


Su representacin es la
siguiente:

Las operaciones realizadas con estas listas se muestran a continuacin:


Hacer nuevo=inicio=p=null;
Insercin al final de la lista
CreaFinal
{
Crea nodo(nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Hacer nuevo.enlace = null;

Si (inicio=null) entonces
{ inicio=nuevo; } Sino
{ p.enlace=nuevo; }
Hacer p=nuevo;
}
Consultar
Consultar
{
Hacer q=inicio;
Repetir Mientras(q!=null)
{
Escribir q.informacin;
Hacer q=q.enlace;

}
}

Insercin al inicio de la lista


CreaInicio
{
Crea nodo(nuevo);
Leer dato;
Hacer nuevo.informacin=dato;
Si (inicio=null) entonces { nuevo.enlace=null; }
Sino { nuevo.enlace=p; }
Hacer p=nuevo;
Hacer inicio=nuevo;

3.1.4
LISTAS DOBLEMENTE ENLAZADAS
Para este tipo de Lista se dice que es el dato que se liga con el anterior y el
siguiente.
En el siguiente ejemplo grfico se muestra cmo funciona una lista doblemente
ligada.
Donde:
1. Informacin
Es el dato de la lista.

2. Anterior
Es la Posicin donde se encuentra el dato anterior.
3. Siguiente
Es la Posicin donde se encuentra el dato siguiente.
Las listas doblemente enlazadas consisten en datos y enlaces tanto al elemento
siguiente como al elemento anterior. Con lo que se consiguen dos grandes
ventajas, primero la lista se puede leer en cualquier direccin, la segunda es que
se pueden leer los enlaces hacia delante como hacia atrs, con lo que si un enlace
resulta no valido se puede reconstruir utilizando el otro enlace.
Como en las listas simplemente enlazadas, las doblemente enlazadas pueden
contener una funcin que almacene cada elemento en una posicin especfica de
la lista a medida que esta se construye, en lugar de colocar cada elemento al final
de la lista.
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene 2
enlaces un nodo llamado siguiente y otro nodo llamado anterior.
3.1.5 LISTAS CIRCULARES
Para este tipo de listas se dice que aqu la lista ligada circular es aquella donde el
ltimo dato se enlaza con el primero, es decir, es similar a la lista enlazada simple
solo que este se enlaza el ltimo dato con el primero.
Donde:
1. Dato
Es el valor de la lista.
2. Siguiente
Es el enlace, posicin que nos da el siguiente.
3. Ultimo
Es la ltima posicin que enlaza al primer elemento.

3.1.6 APLICACIONES LISTAS


Dos de las aplicaciones ms conocidas de las listas son:

Representacin de polinomios

Resolucin de colisiones (hash)

En general, puede decirse que las listas son muy tiles para aquellas
aplicaciones en las cuales se necesite dinamismo en el crecimiento y reduccin
de las estructuras de datos.
Representacin de polinomios
Las listas se utilizan para almacenar los coeficientes diferentes de cero del
polinomio, junto al exponente. As, por ejemplo, dado el polinomio:
P(x) = 3X4 + 0.5X3 + 6X - 4
Su representacin mediante lista, sera como sigue:

Solucin de colisiones (hash)


Se refiere al mtodo de bsqueda por transformacin de claves, ya que se
utilizan listas para resolver colisiones (mtodo de encadenamiento).
La funcin hash convierte una clave dada en una direccin (ndice) dentro de un
arreglo.
Una colisin es la asignacin de una misma direccin a dos o ms claves distintas.

3.2 PILAS
La pila es una de las estructuras de uso ms frecuente de datos, como acabamos
de mencionar.
Se define una pila como una lista de elementos que slo son accesibles desde el
final de la lista, que se llama la parte superior de la pila.
El modelo estndar de una pila es la pila de bandejas en una cafetera. Las
bandejas son retiradas de la parte superior, y el que la lavadora de platos o
ayudante de camarero pone una bandeja en la pila, se coloca en la parte superior
tambin
Una pila es conocido como un ltimo en entrar, primero en salir (LIFO) estructura
de datos.

Las dos operaciones principales de una pila a aadir elementos a la pila y


tomando elementos de la pila.
La operacin de insercin agrega un elemento a una pila.
Tomamos un elemento de la pila con una operacin de pop.
La otra operacin principal para llevar a cabo en una pila est viendo el primer
elemento.
La operacin Pop devuelve el primer elemento, pero la operacin tambin se
elimina de la pila. Queremos ver slo el primer elemento sin llegar a eliminar. Esta
operacin se llama ojeada en C#.
La otra operacin principal para llevar a cabo en una pila est viendo el primer
elemento. La operacin Pop devuelve el primer elemento, pero la operacin
tambin se elimina de la pila. Queremos ver slo el primer elemento sin llegar a
eliminar. Esta operacin se llama ojeada en C#.
Para ver aplicaciones con pilas, en pseudocdigo queda de la siguiente forma:
//Insercin en Pilas de forma tradicional
principal()
{
// declaracin de variables
top = 0; Pila[10]=0; Dato=0;N=10;
do
{
pedir " de el numero a insertar :";
Leer Dato;
// Verificar si hay lugar en pila
si(top >= N) entonces
{ Desplegar " Pila llena";}
sino
{
pila[top]=Dato;
top = top + 1;
}
preguntar " Desea otra insercin en pila :",
Leer otro;
}while(otro != "No");
}

3.2.1 REPRESENTACION EN MEMORIA ESTATICA Y DINAMICA


Definicin de Pila: Es una lista lineal en la que las inserciones y supresiones, se
hacen en un extremo de la lista.

Ejemplos clsicos de la vida cotidiana sera una pila de platos, una pila de
monedas, una pila de billetes, en cada pila se va tomando el de arriba, es decir el
de encima, as mismo pasa con las pilas se inserta y se elimina por arriba.
Las Operaciones bsicas que se realizan con pilas son meter elementos en la pila,
y sacar elementos de la pila, a esto se le conoce como Push y Pop.
A las pilas tambin se les conoce como LIFO, por sus siglas en ingles last in first
out, que significa ltimo en entrar, primero en salir.

3.2.2 OPERACIONES BASICAS CON PILAS


Las dos operaciones principales de una pila a aadir elementos a la pila y
tomando elementos de la pila.
La operacin de insercin agrega un elemento a una pila. Tomamos un elemento
de la pila con una operacin de pop.
La otra operacin principal para llevar a cabo en una pila est viendo el primer
elemento.
La operacin Pop devuelve el primer elemento, pero la operacin tambin se
elimina de la pila. Queremos ver slo el primer elemento sin llegar a eliminar. Esta
operacin se llama ojeada en C#.
La otra operacin principal para llevar a cabo en una pila est viendo el primer
elemento. La operacin Pop devuelve el primer elemento, pero la operacin

tambin se elimina de la pila. Queremos ver slo el primer elemento sin llegar a
eliminar. Esta operacin se llama ojeada en C#.
3.2.3 APLICACIONES PILAS
Las operaciones que se presentan en esta aplicacin son las siguientes:
OPERACIN PUSH
Esta operacin sirve para insertar un elemento e en la pila S, lo vamos a escribir
como:
push(S,e)
Despus de hacer esta operacin sucede que:
El elemento en la cima de la pila S ahora es e

LA OPERACIN POP
Para retirar un elemento de la pila S y asignarlo a una variable del mismo tipo que
el tipo de los elementos de la pila, usaremos la operacin pop escribindola como:
v=pop(S);
En donde v es una variable que almacena el valor del elemento que estaba en la
cima de S. Hacer esta operacin tiene algunas implicaciones:
1. La variable v debe ser del mismo tipo que los elementos almacenados en la
pila.
2. Solamente se puede retirar un elemento de la pila a la vez.
3. Antes de la operacin, e era el elemento en la cima, ahora ya no lo es ms.
El apuntador ``cima'' decrece en una unidad.
LA OPERACIN STACKEMPTY
Esta operacin toma como argumento una estructura del tipo stack (pila) y
devuelve un valor booleano, devuelve un true si la pila est vaca y devuelve un
false si la pila tiene al menos un elemento.
LA OPERACIN STACKTOP
La operacin stacktop(S) devuelve el valor del elemento en la cima de la pila S.
Para hacer esta operacin escribiremos:

v=stacktop(S)
Las implicaciones de usar esta operacin son:
1. Se hace una copia del elemento que est en la cima
2. En realidad se hacen dos operaciones, primero se hace v=pop(S), luego un
push(S,v), porque despus de la operacin stacktop, la pila S queda sin
cambio alguno.
Para ver aplicaciones con pilas, en pseudocdigo queda de la siguiente forma:
// Insercin en Pilas de forma tradicional
principal()
{
// declaracion de variables
top = 0; Pila[10]=0; Dato=0;N=10;
do
{
pedir " de el numero a insertar :";
Leer Dato;
// Verificar si hay lugar en pila
si(top >= N) entonces
{ Desplegar " Pila llena";}
sino
{
pila[top]=Dato;
top = top + 1;
}
preguntar " Desea otra insercion en pila :",
Leer otro;
}while(otro != "No");
}

3.2.4 NOTACION INFIJA Y POSTFIJA


La notacin de infijo es la notacin comn de frmulas aritmticas y lgicas, en
la cual se escriben los operadores entre los operandos en que estn actuando (ej.
2 + 2) usando un estilo de infijo. No es tan simple de analizar (parser) por las
computadoras, como la notacin de prefijo (ej. + 2 2) o lanotacin de postfijo (ej. 2
2 +), aunque muchos lenguajes de programacin la utilizan debido a su
familiaridad.
En la notacin de infijo, a diferencia de las notaciones de prefijo o posfijo, es
necesario rodear entre parntesis a los grupos de operandos y operadores, para
indicar el orden en el cual deben ser realizadas las operaciones. En la ausencia de
parntesis, ciertas reglas de prioridad determinan elorden de las operaciones.

La notacin polaca inversa, notacin de postfijo, o notacin posfija, (en


ingls, Reverse Polish notation, o RPN), es un mtodo algebraico alternativo de
introduccin de datos. Su nombre viene por analoga con la relacionada notacin
polaca, una notacin de prefijo introducida en 1920 por el matemtico polaco Jan
ukasiewicz, en donde cada operador est antes de sus operandos. En la
notacin polaca inversa es al revs, primero estn los operandos y despus viene
el operador que va a realizar los clculos sobre ellos. Tanto la notacin polaca
como la notacin polaca inversa no necesitan usar parntesis para indicar el orden
de las operaciones mientras la aridad del operador sea fija.
El esquema polaco inverso fue propuesto en 1954 por Burks, Warren, y Wright1 y
reinventado independientemente por Friedrich L. Bauer y Edsger Dijkstra a
principios de los aos 1960, para reducir el acceso de la memoria de computadora
y para usar el stack para evaluar expresiones. La notacin y los algoritmos para
este esquema fueron extendidos por el filsofo y cientfico de la computacin
australiano Charles
Leonard
Hamblin a
mediados
de
los
aos
1960.2 3 Posteriormente, Hewlett-Packard lo aplic por primera vez en la
calculadora de sobremesa HP-9100A en 1968 y luego en la primera calculadora
cientfica de bolsillo, la HP-35. Durante los aos 1970 y los aos 1980, el RPN
tena cierto valor incluso entre el pblico general, pues fue ampliamente usado en
las calculadoras de escritorio del tiempo - por ejemplo, las calculadoras de la serie
HP-10C.
En ciencias de la computacin, la notacin de postfijo es frecuentemente usada en
lenguajes de programacin concatenativos y basados en pila. Tambin es comn
en sistemas basados en flujo de datos y tuberas, incluyendo las tuberas de Unix.

3.2.5 RECURSIVIDAD CON AYUDA DE PILAS


Las pilas se usan comnmente para indicar en qu punto se encuentra un
programa cuando contiene procedimientos que se llaman a s mismos. Estos
procedimientos se conocen como procedimientos recursivos.
La recursividad es una tcnica en la que un procedimiento o funcin se hace
llamadas a s mismo en el proceso de realizacin de sus tareas. La recursividad se
puede definir mediante un clsico ejemplo de la funcin factorial. La recursividad
es una tcnica de programacin muy potente que puede ser usada en lugar de
una iteracin (Bucles o ciclos). Ello implica una forma diferente de ver las acciones
repetitivas permitiendo que un subprograma se llame a s mismo para resolver una
operacin ms pequea del programa original.
4!= 4*3*2*1=24

3.3 COLAS
En Programacin, se le llama Cola al Tipo de Dato Abstracto que es una Lista en
la que sus elementos se introducen (Encolan) nicamente por un extremo que le
llamamos Final de la Cola y se remueven (Desencolan) nicamente por el
extremo contrario al que le llamamos Frente de la Cola o Principio de la Cola.

3.3.1 REPRESENTACIN EN MEMORIA ESTATICA Y DINAMICA

Usando la memoria esttica: arreglo con tamao fijo y frente fijo o movible
o representacin circular.

Usando la memoria dinmica: Listas ligadas.

3.3.2 OPERACIONES BASICAS CON COLAS

Crear: se crea la cola vaca.

Encolar (aadir, entrar, insertar): se aade un elemento a la cola. Se


aade al final de esta.

Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la


cola, es decir, el primer elemento que entr.

Frente (consultar, front): se devuelve el elemento frontal de la cola, es


decir, el primer elemento que entr.

Vaca: devuelve cierto si la pila est vaca o falso en caso contrario (empty).

3.3.3 TIPOS DE COLAS COLA SIMPLE COLA CIRCULAR Y COLAS DOBLES

Cola Simple: Estructura lineal donde los elementos salen en el mismo


orden en que llegan.

Cola de Prioridades: Estructura lineal en la cual los elementos se insertan


en cualquier posicin de la cola y se remueven solamente por el frente.

Cola circular: Representacin lgica de una cola simple en un arreglo.

Cola Doble (Bicola): Estructura lineal en la que los elementos se pueden


aadir o quitar por cualquier extremo de la cola (Cola bidireccional).

3.3.4 APLICACIONES COLAS DE PRIORIDAD


Las colas se utilizan en sistemas informticos, transportes y operaciones de
investigacin (entre otros), dnde los objetos, personas o eventos son tomados
como datos que se almacenan y se guardan mediante colas para su posterior
procesamiento. Este tipo de estructura de datos abstracta se implementa en
lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

You might also like