TAD Lineales: Pila, Cola y Lista TAD Lineales: Pila, Cola y Lista

Anuncio
TAD Lineales: Pila, Cola y Lista
Tema 2
Objetivos
! Dar a conocer los TAD lineales pila, cola y lista
! Presentar la especificación de cada uno de los TAD
! Discutir implementaciones alternativas para cada uno de ellos
Contenidos
2.1 Introducción
2.2 El TAD Pila
2.2.1 Conceptos
2.2.2 Especificación algebraica
2.2.3 Implementación
2.2.4 Consideraciones sobre TAD basados en punteros
2.3 El TAD Cola
2.3.1 Conceptos
2.3.2 Especificación algebraica
2.3.3 Implementación
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
1
TAD Lineales: Pila, Cola y Lista
Tema 2
Contenidos
2.4 El TAD Lista
2.4.1 Conceptos
2.4.2 Especificación algebraica
2.4.3 Implementación
Duración
! 3 clases (4,5 h)
Bibliografía
! Diseño de programas. Formalismo y abstracción
Autor: Ricardo Peña Marí
Editorial : Prentice-Hall, 1999
Págs. 227-234
! Estructuras de datos. Algoritmos, abstracción y objetos
Autor: Luis Joyanes Aguilar, Ignacio Zahonero Martínez
Editorial: McGraw-Hill
Págs. 153-226
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
2
Tema 2
TAD Lineales: Pila, Cola y Lista
2.1 Introducción
! Estructuras lineales → importantes porque aparecen con frecuencia en muchos problemas
! Ejemplos: una cola de clientes de un banco, la pila de ejecución de un programa, los
caracteres de una cadena o las páginas de un libro
! Características:
! existe un elemento llamado primero
! existe un elemento llamado último
! cada elemento, excepto el primero, tiene un único predecesor
! cada elemento, excepto el último, tiene un único sucesor
Algoritmos y Estructuras de Datos II
Tema 2
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
3
TAD Lineales: Pila, Cola y Lista
! Operaciones básicas:
! crear la estructura vacía
! insertar un elemento
! borrar un elemento
! obtener un elemento
! Para definir claramente el comportamiento de la estructura es necesario determinar en qué
posición se inserta un elemento nuevo y qué elemento se borra o se obtiene
! Principales estructuras lineales: pilas, colas y listas
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
4
TAD Pila
Tema 2
2.2 El TAD Pila
2.2.1 Conceptos
! Una pila es un contenedor de objetos que son insertados y
eliminados de acuerdo con el principio de que el último en
entrar es el primero en salir (LIFO, Last Input First Output)
Apilar
Desapilar
Cima de
la pila
! Los elementos se insertan de uno en uno (apilar)
! Se sacan en el orden inverso al cual se han insertado
(desapilar)
! El único elemento que se puede observar dentro de
la pila es el último insertado (cima)
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
a3
a2
a1
Universidad de Huelva
5
TAD Pila
Tema 2
! Aplicaciones:
! estructuras auxiliares en numerosos algoritmos y esquemas de programación:
"
recorridos de árboles y grafos
"
evaluación de expresiones
"
conversión entre notaciones de expresiones (postfija, prefija, infija)
! gestión de los registros de activación de los subprogramas activos durante la ejecución
de un programa
! los editores de texto proporcionan normalmente un botón deshacer que cancela las
operaciones de edición recientes y restablece el estado anterior del documento. La
secuencia de operaciones recientes se mantiene en una pila
! los navegadores permiten habitualmente volver hacia atrás en la secuencia de páginas
visitadas. Las direcciones de los sitios visitados se almacenan en una pila
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
6
TAD Pila
Tema 2
2.2.2 Especificación algebraica
espec pilas
usa booleanos
parámetro formal
género elemento
fpf
género pila
operaciones
creaPila: # pila
apilar: pila elemento # pila
parcial desapilar: pila # pila
parcial cima: pila # elemento
vacía?: pila # booleano
dominios de definición p: pila; e: elemento
desapilar (apilar (p,e))
cima (apilar (p,e))
ecuaciones p: pila; e: elemento
desapilar (apilar (p,e)) = p
cima (apilar (p,e)) = e
vacia? (crearPila) = verdad
vacia? (apilar (p,e)) = falso
fespec
Algoritmos y Estructuras de Datos II
Tema 2
Gen (pila) = {creaPila, apilar}
Cons (pila) =
Mod (pila) = {desapilar}
Obs (pila) = {cima, vacía?}
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
7
TAD Pila
! El conjunto de generadoras es libre, ya que cualquier término formado por las operaciones
generadoras denota siempre un valor distinto del TAD Pila
! Los patrones necesarios para representar todas las posibles pilas se obtienen del conjunto
de las operaciones generadoras
! creaPila: representa la pila sin ningún elemento (pila vacía)
! apilar(p,e): representa cualquier pila con, al menos, un elemento
! Las operaciones desapilar y cima no están definidas para la pila vacía
! La parametrización en las especificaciones sirve para formular una descripción genérica,
que podrá dar lugar a diversas especificaciones concretas
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
8
TAD Pila
Tema 2
2.2.3 Implementación
Mediante una tabla
elementos
e1
e2
e3
...
en
...
1
2
3
...
n
...
indCima
constante max = valor arbitrario fconstante;
tipo pila = clase
público
constructor creaPila;
acción apilar (e: elemento);
acción desapilar;
función cima: elemento;
función esVacía: booleano
privado
elementos: tabla [1..max] de elemento;
indCima: 0..max;
fclase;
n
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
e2
e3
1
2
elementos
indCima
9
en
...
n
Universidad de Huelva
TAD Pila
Tema 2
e1
max
3
...
...
n
...
max
constante max = valor arbitrario fconstante;
tipo pila = clase
público
constructor creaPila;
acción apilar (e: PtrElemento);
acción desapilar;
función cima: PtrElemento;
función esVacía: booleano
privado
elementos: tabla [1..max] de PtrElemento;
indCima: 0..max;
fclase;
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
10
TAD Pila
Tema 2
!
Consideraciones:
!
si la pila es no vacía, el elemento almacenado en elementos[indCima] corresponde a la
cima de la pila
!
elementos[1] ≡ fondo de la pila
!
indCima = 0 ≡ pila vacía
!
Ventaja: todas las operaciones tienen un coste temporal constante O(1)
!
Inconvenientes:
!
reservar espacio de memoria para el máximo previsto de elementos
!
gestionar pila llena
!
Opciones para controlar la parcialidad o situaciones de error
1. controlar el posible error dentro de la operación
2. proporcionar suficientes operaciones para que el propio usuario evite el error
3. devolver valores que indiquen cuál ha sido el resultado de la operación
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
11
TAD Pila
Tema 2
Mediante una lista enlazada
c
e1
e2
...
en
tipo pila = clase
público
constructor creaPila;
acción apilar (e: Elemento);
acción desapilar;
función cima: Elemento;
función esVacía: booleano
privado
c: PtrNodo;
fclase;
ftipo;
Ventajas:
! todas las operaciones tienen un coste temporal constante O(1)
! no hay limitaciones de tamaño
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
12
TAD Pila
Tema 2
c
...
e1
e2
en
tipo pila = clase
público
constructor creaPila;
acción apilar (e: PtrElemento);
acción desapilar;
función cima: PtrElemento;
función esVacía: booleano
privado
c: PtrNodo;
fclase;
ftipo;
Ventajas:
! todas las operaciones tienen un coste temporal constante O(1)
! no hay limitaciones de tamaño
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
13
TAD Pila
Tema 2
! Se define una clase Nodo, que representa a cada uno de los objetos que forman
la lista enlazada
tipo
PtrNodo = puntero a Nodo;
nodo = clase
público
constructor creaNodo(e: Elemento; psig: PtrNodo);
acción setElemento(e: Elemento);
acción setSig(psig: PtrNodo);
función getElemento: Elemento;
función getSig: PtrNodo;
privado
elem: Elemento;
sig: PtrNodo;
fclase;
ftipo;
Algoritmos y Estructuras de Datos II
tipo
PtrElemento = puntero a Elemento;
PtrNodo = puntero a Nodo;
nodo = clase
público
constructor creaNodo(pe: PtrElemento; psig: PtrNodo);
acción setElemento(pe: PtrElemento);
acción setSig(psig: PtrNodo);
función getElemento: PtrElemento;
función getSig: PtrNodo;
privado
elem: PtrElemento;
sig: PtrNodo;
fclase;
ftipo;
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
14
Tema 2
TAD Lineales: Pila, Cola y Lista
2.2.4 Consideraciones sobre TAD basados en punteros
! Si se realiza una asignación entre dos variables de tipo puntero (ej., p := q), no se realiza una
copia del valor del tipo (p.e. una pila completa), sino que se duplica la forma de acceder a
ella
p
4
6
8
q
1
3
5
4
6
8
1
3
5
p
q
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
15
Universidad de Huelva
16
TAD Pila
Tema 2
! Método de la clase pila para realizar una copia
acción pila.copia (p: pila);
var
pv, n, antn: PtrNodo;
fvar;
inicio
self.creaVacía;
pv = p.c;
si pv ≠ nulo entonces
reservar (n, creaNodo(pv^.getElem, nulo);
c := n;
antn := n;
pv := pv^.getSig;
mientras pv ≠ nulo hacer
reservar (n, creaNodo(pv^.getElem, nulo);
antn^.setSig(n);
antn := n;
pv := pv^.getSig;
fmientras;
fsi
facción;
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Tema 2
TAD Lineales: Pila, Cola y Lista
! Cuando dejamos de necesitar una estructura dinámica, debemos ocuparnos de liberar la
memoria
! Método destructor para la clase pila:
destructor pila.liberar;
inicio
mientras  self.esVacía hacer
self.desapilar;
fmientras;
facción;
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
17
TAD Cola
Tema 2
2.3 El TAD Cola
2.3.1 Conceptos
! Los elementos se añaden por el extremo final, y se eliminan por el extremo opuesto: frente
! El único elemento observable en todo momento es el primero que fue insertado
! Se le suele denominar estructura FIFO (First Input First Output).
Aplicaciones
$ Colas de trabajos a realizar por una impresora
$ Asignación de tiempo de procesador a los procesos en un sistema multiusuario (sin
prioridad)
$ Simular situaciones reales: cajero automático, llamadas en espera, ...
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
18
TAD Cola
Tema 2
2.3.2 Especificación algebraica
espec colas
usa booleanos
parámetro formal
género elemento
fpf
género cola
operaciones
creaCola: # cola
añadir: cola elemento # cola
parcial eliminar: cola # cola
parcial primero: cola # elemento
vacía?: cola # booleano
dominios de definición c: cola; e: elemento
eliminar (añadir (c,e))
primero (añadir (c,e))
Algoritmos y Estructuras de Datos II
...
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
19
TAD Cola
Tema 2
ecuaciones c: cola; e: elemento
eliminar (añadir (c,e)) = si vacia?(c) entonces creaCola
sino añadir (eliminar(c), e)
fsi
primero (añadir (c,e)) = si vacia?(c) entonces e
sino primero(c)
fsi
vacia? (creaCola) = verdad
vacia? (añadir (c,e)) = falso
fespec
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
20
TAD Cola
Tema 2
!
Las operaciones son:
Gen (cola) = {creaCola, añadir}
Mod (cola) = {eliminar}
Obs (cola) = {primero, vacia?}
El conjunto de generadoras es libre, ya que cualquier término formado por las operaciones
generadoras denota siempre un valor distinto del TAD Cola
!
Los patrones necesarios para representar todas las posibles colas se obtienen del conjunto
de las operaciones generadoras
!
creaCola: representa la cola sin ningún elemento (cola vacía)
añadir(c,e): representa cualquier cola con, al menos, un elemento
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
21
TAD Cola
Tema 2
2.3.3 Implementación
módulo TadCola
importa TadElemento, TadNodo
exporta
tipo
cola
primero
último
e1
e2
Algoritmos y Estructuras de Datos II
en
·
cola= clase
público
constructor creaCola;
acción añadir (e: elemento);
acción eliminar;
función primero: elemento;
función esVacía: booleano;
acción copia (c: cola);
destructor liberar;
privado
primero, ultimo: PtrNodo;
fclase;
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
22
TAD Cola
Tema 2
constructor cola.creaCola
inicio
primero:= nulo;
ultimo:= nulo;
fconstructor
accion cola.eliminar
(* Se elimina por el principio *)
var aux: PtrNodo; fvar
inicio
si primero = ultimo entonces
ultimo := nulo;
fsi;
aux:= primero;
primero:= primero^.getSig;
liberar(aux)
faccion
Algoritmos y Estructuras de Datos II
acción cola.añadir (e:elemento)
var nuevo: PtrNodo
n: nodo ;
fvar
inicio
si primero = nulo entonces
reservar (primero, creaNodo(e, nulo));
ultimo:= primero
sino
reservar (nuevo, creaNodo(e, nulo));
ultimo^.setSig (nuevo);
ultimo:= nuevo;
fsi;
faccion
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
23
TAD Lista
Tema 2
2.4 El TAD Lista
2.4.1 Conceptos
! Generalización del TAD Pila y TAD cola
! Secuencia de elementos en la que se permite el acceso para consultar, añadir o eliminar
elementos en cualquier posición
! Existen diversas formas de generar las listas. En nuestro caso elegimos un conjunto de
operaciones pequeño y libre
! Nos apoyamos en la definición recursiva de secuencia de elementos: colección de
elementos del mismo tipo que:
% bien es vacío, en cuyo caso se denomina secuencia vacía
% bien se obtiene tras añadir por la izquierda un elemento a otra secuencia existente
! Operaciones generadoras
[]
Gen (lista) =
+izq (e, l)
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
24
TAD Lista
Tema 2
2.4.2 Especificación algebraica
! PRIMERA PARTE: especificación del TAD Lista con las operaciones de añadir, eliminar y
consultar elementos por los extremos
espec listas1
usa booleanos, naturales
parámetro formal
género elemento
operaciones
_ == _: elemento elemento # booleano
_ ≠ _: elemento elemento # booleano
fpf
género lista
operaciones
[ ]: # lista
+izq: elemento lista # lista
[ _ ] : elemento # lista
_ & _ : lista lista # lista
+dch: lista elemento # lista
vacía?: lista # booleano
Algoritmos y Estructuras de Datos II
parcial -izq: lista # lista
parcial -dch: lista # lista
parcial izq: lista # elemento
parcial dch: lista # elemento
longitud: lista # natural
está?: elemento lista # booleano
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
...
25
TAD Lista
Tema 2
dominios de definición e: elemento; l: lista
-izq (+izq (e, l))
-dch (+izq (e, l))
izq (+izq (e, l))
dch (+izq (e, l))
ecuaciones e, e1, e2: elemento; l, l1, l2: lista
[e] = +izq (e, [ ])
[]&l=l
+izq (e, l1) & l2 = +izq (e, l1 & l2)
+dch ([ ], e) = +izq (e, [ ])
+dch (+izq (e1, l), e2) = +izq (e1, +dch (l, e2))
estas dos ecuaciones son equivalentes a la ecuación
+dch (l, e) = l & [e]
...
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
26
TAD Lista
Tema 2
-izq (+izq (e, l)) = l
-dch (+izq (e, l)) =
si vacía? (l) entonces [ ]
sino +izq (e, -dch (l))
fsi
esta ecuación es equivalente a las ecuaciones
-dch (+izq (e, [ ])) = [ ]
-dch (+izq ( e1, +izq (e2, l))) = +izq (e1, -dch (+izq (e2, l)))
izq (+izq (e, l)) = e
si vacía? (l) entonces e
sino dch (l)
fsi
esta ecuación es equivalente a las ecuaciones
dch (+izq (e, [ ]) = e
dch (+izq (e1, +izq (e2, l))) = dch (+izq (e2, l))
dch (+izq (e, l)) =
...
Algoritmos y Estructuras de Datos II
Tema 2
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
27
Universidad de Huelva
28
TAD Lista
long ([ ]) = 0
long (+izq (e, l)) = suc (long (l))
está? (e, [ ]) = falso
está? (e1, +izq (e2, l)) = e1 == e2 ∨ está? (e1, l)
vacía? ([ ]) = verdad
vacía? (+izq (e, l)) = falso
fespec
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
TAD Lista
Tema 2
! SEGUNDA PARTE: especificación del TAD Lista enriquecido con las operaciones de
inserción, consulta y modificación en cualquier posición
espec listas
usa listas1
operaciones
parcial insertar: lista nat elemento # lista
{insertar elemento i-ésimo}
parcial eliminar: lista nat # lista
{eliminar elemento i-ésimo}
parcial modificar: lista nat elemento # lista
{modificar elemento i-ésimo}
parcial _ [ _ ] : lista nat # elemento
{elemento i-ésimo}
parcial pos: elemento lista # natural
{posición del elemento}
dominios de definición e: elemento; l: lista; i: natural
insertar (l, i, e)
está definido sólo si (1 ≤ i) ∧ (i ≤ long (l) + 1)
eliminar (l, i)
está definido sólo si (1 ≤ i) ∧ (i ≤ long (l))
modificar (l, i, e)
está definido sólo si (1 ≤ i) ∧ (i ≤ long (l))
l[i]
está definido sólo si (1 ≤ i) ∧ (i ≤ long (l))
pos (e, l)
está definido sólo si está? (e, l)
Algoritmos y Estructuras de Datos II
...
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
29
TAD Lista
Tema 2
ecuaciones e, e1, e2: elemento; l: lista; i: natural
{ i solo puede valer 1. 1 ≤ i ≤ 1 }
insertar ([ ], i, e) = +izq (e, [ ])
insertar (+izq (e1, l), i, e2)) = si i = 1 entonces +izq (e2, +izq (e1, l))
sino +izq (e1, insertar (l, i -1, e2))
fsi
eliminar (+izq (e, l), i) =
si i = 1 entonces l
{ 1 ≤ i ≤ long (+izq (e, l)) }
sino +izq (e, eliminar (l, i -1))
fsi
modificar (+izq (e1, l), i, e2) = si i = 1 entonces +izq (e2, l)
{ 1 ≤ i ≤ long (+izq (e, l)) }
sino +izq (e1, modificar (l, i-1, e2))
fsi
...
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
30
TAD Lista
Tema 2
+izq (e, l) [i] =
si i = 1 entonces e
sino l [i-1]
fsi
pos (e1, +izq (e2, l)) =
si e1 == e2 entonces 1
sino 1 + pos (e1, l)
fsi
fespec
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
31
TAD Lista
Tema 2
2.4.3 Implementación dinámica
! La implementación dinámica más sencilla se realiza mediante un puntero apuntando al
nodo que contiene el primer elemento de la lista
! Cada nodo está formado por el elemento y un puntero que apunta al siguiente nodo. El
último nodo de la lista apunta a nulo
tipo lista = clase
público
{ operaciones del TAD }
privado
cab: PtrNodo;
fclase;
ftipo;
Algoritmos y Estructuras de Datos II
cab
e1
I.T. en Informática de Gestión/Sistemas
e2
...
en
Universidad de Huelva
32
TAD Lista
Tema 2
! En la siguiente tabla se observa el coste de las operaciones, para el peor caso, utilizando
este tipo de representación
operación
coste
operación
coste
crearLista
O(1)
longitud
O(n)
añadeIzq
O(1)
pertenece
O(n)
creaUnitaria
O(1)
inserta
O(n)
eliminaIzq
O(1)
elimina
O(n)
observaIzq
O(1)
modifica
O(n)
esVacía
O(1)
observa
O(n)
concatena
O(n)
posición
O(n)
añadeDch
O(n)
observaDch
O(n)
eliminaDch
O(n)
Algoritmos y Estructuras de Datos II
n ≡ longitud de la lista
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
33
TAD Lista
Tema 2
! Ampliando la estructura del tipo, algunas operaciones pasan a ser de orden constante
último
primero
tipo lista = clase
público
{ operaciones del TAD }
privado
primero, último: PtrNodo;
num: natural;
fclase;
ftipo;
Algoritmos y Estructuras de Datos II
e1
e2
...
en
n
num
I.T. en Informática de Gestión/Sistemas
operación
coste
concatena
O(1)
añadeDch
O(1)
observaDch
O(1)
longitud
O(1)
Universidad de Huelva
34
Tema 2
TAD Lista
! Listas con punto de interés
% Se define un elemento distinguido dentro de la lista
% Sirve de referencia para realizar las operaciones
% Puede cambiarse de elemento con funciones del tipo (poner al principio, avanzar, poner al final, etc.)
% Se añade un nuevo índice que mantiene el índice del elemento distinguido y un puntero que se sitúa en
el nodo inmediatamente anterior al elemento distinguido
% Ejemplo: línea de texto en un procesador de textos
tipo lista = clase
público
{ operaciones del TAD }
privado
primero, último, actual: PtrNodo;
num, indActual: natural;
fclase;
ftipo;
Algoritmos y Estructuras de Datos II
Tema 2
Definición del TAD Lista
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
operación
coste
insertar
O(1)
eliminar
O(1)
modificar
O(1)
observa
O(1)
posición
O(1)
Universidad de Huelva
35
TAD Lista
tipo lista = clase
público
constructor crearLista;
acción añadeIzq (e: elemento);
acción concatena (l: lista);
acción creaUnitaria (e: elemento);
acción añadeDch (e: elemento);
acción eliminaIzq;
acción eliminaDch;
función observaIzq: elemento;
función observaDch: elemento;
función longitud: entero;
función pertenece (e: elemento): booleano;
función esVacía: booleano;
acción inserta (i: entero; e: elemento);
acción elimina (i: entero);
acción modifica (i: entero; e: elemento);
función observa (i: entero): elemento;
función posición (e: elemento): natural;
acción copia (l: lista);
acción libera;
privado
primero, último: PtrNodo;
num: natural;
fclase;
ftipo;
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
36
TAD Lista
Tema 2
Ejemplo de operaciones del TAD Lista
Crear la lista vacía
constructor crearLista;
Añadir un elemento por la derecha
acción añadeDch (e: elemento);
primero:= nulo;
var nuevo: ptrNodo fvar
ultimo:= nulo;
si esVacía entonces creaUnitaria (e)
num:= 0;
sino
reservar (nuevo, creaNodo(e, nulo));
fconstructor
último^.setSig(nuevo);
último:= nuevo;
num:= num + 1;
fsi
facción
Algoritmos y Estructuras de Datos II
Tema 2
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
37
TAD Lista
Eliminar el elemento de la derecha
Ejemplo de operaciones
del TAD Lista
Algoritmos y Estructuras de Datos II
acción eliminaDch;
var aux: ptrNodo; fvar
si  esVacía entonces
si num=1 entonces
liberar (primero);
l.crearLista;
sino
aux:= primero;
mientras aux^.getSig ≠ ultimo hacer aux:= aux^.getSig; fmientras
aux^.setSig(nulo);
liberar (último);
último:= aux;
num:= num – 1;
fsi
fsi
facción
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
38
Descargar