Professional Documents
Culture Documents
Procedimientos y funciones encapsulan las operaciones, las aslan del cuerpo del algoritmo.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
Si en un programa utilizamos el tipo de datos Cuadrado y tenemos definidas en ese tipo de dato la funcin rea, la llamada a la funcin ser Area(c), independientemente de la implementacin que hayamos hecho.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
Las estructuras de datos que se han utilizado hasta ahora ya estaban definidas por el lenguaje de especificacin de algoritmos utilizado (son estructuras de datos fsicas).
El lenguaje define el tipo array e incluye las herramientas necesarias para declarar un array, acceder a un elemento, etc.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
Las estructuras de datos utilizadas en este tema (pilas, colas, listas enlazadas) no estn implementadas en el lenguaje de programacin.
Ser necesario definirlas con las estructuras de datos disponibles. Ser necesario implementar las operaciones primitivas para manejarlas.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
Se almacena en una zona de memoria esttica: pila. El dato se identifica por una variable que no es ms que una direccin de memoria dnde est almacenada la informacin. Cuando se asigna un valor a ese dato, se almacena directamente en esa direccin de memoria. Cuando se accede a ese dato, por ejemplo al ejecutar la instruccin escribir(a), se accede de forma directa al contenido de esa direccin de memoria.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
entero: a
Cuando el programa comienza su ejecucin, slo se reserva espacio para almacenar una referencia a la posicin donde se almacenar el dato, no para almacenar el dato en s.
La variable que guarda la direccin de memoria (la referencia) es el puntero. El puntero se almacena en la pila.
Durante la ejecucin del programa es posible reservar memoria para el dato al que apunta el puntero.
El dato en s se almacena en una zona de memoria dinmica: el montculo.
tipoDato, cualquier tipo de dato estndar o definido por el usuario. Al arrancar el programa la variable de tipo puntero no est inicializada (no tiene ningn valor). Slo es posible darle valor asignndola a otro puntero, reservando espacio en memoria o asignndola a puntero nulo.
a ptr1 ptr2
Puntero nulo.
Se corresponde a la constante nulo. Se considera un puntero inicializado (cmo dar a una variable numrica un valor 0). Apunta a una direccin de memoria nula.
puntero_a entero : ptr1 puntero_a entero : ptr2
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
varPuntero Si varPuntero hace referencia a la zona de memoria a la que apunta, varPuntero hace referencia al contenido de dicha zona de memoria. Hay que tener en cuenta que:
varPuntero es una variable de tipo puntero, por lo que slo es posible asignarla otro puntero (otra variable de tipo puntero, puntero nulo o reservar espacio).
o Los operadores de asignacin o las instrucciones de lectura o escritura no funcionan de la misma forma para variables de tipo puntero que para otro tipo de variables.
varPuntero hace referencia al contenido de la memoria a la que apunta al puntero, por lo que es un dato del tipo base del puntero.
o Sobre ella se podrn hacer todas las operaciones que se puedan hacer con el tipo base del puntero.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
10
a ptr1 ptr2
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
11
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
12
liberar(ptr3)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
13
Existe una variable de tipo puntero que apunta al primer nodo de la estructura.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
14
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
15
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
16
Listas contiguas.
Los elementos ocupan posiciones contiguas de memoria. Se pueden implementar con arrays.
Los elementos ocuparan posiciones correlativas del array. Presentan dos problemas:
o La insercin o el borrado de elementos implica mover las posiciones para mantener el orden original. o El nmero de elementos de la lista se puede modificar, pero no puede sobrepasar el tamao mximo del array.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
17
1 2 3
insertar(v,PEPE,n)
4 5 6 7 8
insertar(v,CARMEN,n)
1 2 3 4 5 6 7 8
1 2 3 borrar(v,5,n) 4 5 6 7 8
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
18
Cada elemento contiene una referencia al siguiente elemento de la estructura. El orden lgico lo darn los enlaces que hay entre elementos. El primer elemento en el orden lgico no tiene por qu corresponderse con el primer elemento almacenado.
El necesario indicar cul es el primer elemento en el orden lgico.
Tambin es necesario indicar cual ser el ltimo elemento en el orden lgico de la estructura. La insercin o eliminacin de elementos no implica mover los elementos de sitio.
Slo se modifican las referencias al siguiente elemento.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
19
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
20
Puntero nulo
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
21
Pilas
Es un tipo especial de lista. Estructura lineal de datos compuesta por una secuencia de elementos en la que las operaciones slo se pueden realizar por uno de sus extremos llamado cima (tope o top).
Estructuras de tipo LIFO (Last In-First Out).
Simulacin de la recursividad. En general, cualquier aplicacin en la que se necesite recuperar informacin en orden inverso a como ha entrado.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
22
Pilas (II)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
23
Pilas (III)
La estructura de tipo Pila no se considera implementada en nuestro lenguaje de programacin.
En otros lenguajes, como .NET, existe la clase Stack (pila en ingls) que implementa pilas e incluye todas las operaciones que se pueden hacer sobre las pilas.
24
Pilas (IV)
Operaciones primitivas.
Procedimiento PilaNueva(ref pila: p)
Crea un pila sin elementos.
Procedimiento PInsertar (ref pila:p; valor TipoElemento:e) o Push(ref pila : p; valor TipoElemento: e).
Inserta un elemento e en la pila y devuelve la pila resultante. TipoElemento es un tipo de dato genrico que se corresponde al tipo de dato de los elementos que contendr la pila.
Procedimiento Pop(ref pila : p; ref TipoElemento : e) o Sacar(ref pila : p; ref TipoElemento : e).
Elimina un elemento de la cima de la pila, devolviendo la pila resultante y el elemento extrado.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
25
Si se implementa con un array, tambin es necesario determinar dnde se almacenar la informacin (el array el).
Como se trata de estructuras de datos estticas, debemos definir tambin el tamao mximo del array (MaxPila).
Adems el tipo de dato TipoElemento definir el tipo de elementos que almacenar la pila.
MaxPila
cima
el Pila
26
Funcin EsPilaVaca,
Devuelve verdad si la pila est vaca.
procedimiento PilaNueva(ref pila : p) inicio p.cima 0 fin_procedimiento lgico: funcin EsPilaVaca(valor pila :p) inicio devolver(p.cima = 0) fin_funcin
cima = 0
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
27
procedimiento PInsertar(ref pila:p; valor TipoElemento:e) inicio si p.cima = MaxPila entonces // Error, la pila est llena si_no p.cima p.cima + 1 p.el[p.cima] e fin_si fin_procedimiento
cima
0 3 1 2
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
28
procedimiento Cima(valor pila : p ; ref TipoElemento : e) inicio si p.cima = 0 entonces // Error la pila est vaca si_no e p.el[p.cima] fin_si fin_procedimiento
cima
3
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
29
procedimiento PBorrar(ref pila : p) inicio si EsPilaVaca(p) entonces // Error la pila est vaca si_no p.cima p.cima - 1 fin_si fin_procedimiento
cima
2 1
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
30
procedimiento Pop(ref pila:p; ref TipoElemento:e) inicio si EsPilaVaca(p) entonces // Error la pila est vaca si_no e p.el[p.cima] p.cima p.cima - 1 fin_si fin_procedimiento
cima
0
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
31
La pila est definida por la posicin del primer elemento que ser por dnde hay que insertar y eliminar informacin.
No es necesario definir el almacenamiento como ocurra con los arrays:
Los nodos se almacenan dispersos por el montculo (memoria dinmica).
32
Funcin EsPilaVaca
lgico: funcin EsPilaVaca(valor pila:p) inicio devolver(p = nulo) fin_funcin
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
33
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
34
reservar(aux)
aux.sig aux.info
p e
aux
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
35
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
36
PBorrar(p)
procedimiento PBorrar( ref pila : p) var pila : aux inicio si EsPilaVaca(p) entonces // error, la pila est vaca si_no aux p p p.sig liberar(aux) fin_si fin_procedimiento
aux
p
aux
ANA
MANOLO
p.sig
aux p
ANA
MANOLO
liberar(aux)
aux
MANOLO
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
37
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
38
p.sig
p.info
liberar(aux) aux p
p e MANOLO aux
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
39
Ejemplo 3.1
Utilizando las operaciones primitivas para trabajar con pilas, disee un procedimiento que devuelva una copia de una pila ya creada.
Es necesario utilizar una pila auxiliar para copiar los elementos en el mismo orden que la pila original.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
40
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
41
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
42
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
43
Colas
Estructura lineal de datos compuesta por un conjunto de elementos en la que la adicin de nuevos elementos se har por un extremo de la cola, final (rear), y la salida de elementos por el contrario, principio (front). Estructura de datos de tipo FIFO (first in-first out), es decir el primer elemento en entrar es el primero en salir. En aplicaciones informticas se utiliza para controlar procesos que tengan que realizarse en un cierto orden (colas de impresin, colas de prioridades, etc.)
principio e0 e1 e2 e3 e4 e5 e6 final e7
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
44
Colas (II)
La estructura de tipo Cola no se considera implementada en nuestro lenguaje de programacin.
En otros lenguajes, como .NET, existe la clase Queue (cola en ingls) que implementa colas e incluye todas las operaciones que se pueden hacer sobre las colas.
45
Colas (III)
Operaciones primitivas.
ColaNueva(ref cola: c), inicializa una nueva cola. EsColaVaca(valor cola :c), una funcin lgica que devuelve verdad si la cola est vaca. CInsertar(ref cola : c; valor tipoElemento: e), inserta un elemento de tipo TipoElemento en la cola en la posicin final. CBorrar(ref cola : c), elimina el elemento principio de la cola. Primero(valor cola : c; ref tipoElemento : e), obtiene el valor del elemento situado en la posicin principio de la cola. Sacar(ref cola : c; ref tipoElemento : e), elimina el primer elemento de la cola devolviendo su contenido en e.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
46
Si se implementa como un array, es necesario tambin determinar dnde se almacenarn los elementos. Se trata del array de elementos el.
o El tipo base del array es el tipo de dato genrico TipoElemento. o El array tiene un tamao de MxCola elementos.
const MaxCola = tipos = TipoElemento registro = cola entero : p,f array[1..MaxCola] de TipoElemento : el fin_registro
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
47
CInsertar(c,A)
c p f A 1 1
CInsertar(c,B)
c p f A 1 2 p f B
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
48
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
49
50
c p f
Funcin EsColaVaca.
lgico: funcin EsColaVaca(valor cola : c) inicio devolver(c.p = nulo) //o (c.f = nulo) fin_funcin
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
51
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
52
CInsertar(c,ANA)
reservar(aux)
aux c p f
reservar(aux)
aux.info aux.sig
e nulo
aux
LUIS
aux.info aux.sig
e nulo
c p f
c.p c.f
aux aux
aux
LUIS
aux
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
53
procedimiento Primero(valor cola : c; ref TipoElemento : e) inicio si c.p = nulo entonces // Error, la cola est vaca si_no e c.p.info fin_si fin_procedimiento
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
54
aux
c.p
c.p
c.p.sig
liberar(aux)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
55
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
56
c p f ANA e ANA
c.p.info
c.p
c.p.sig
aux
c.p
liberar(aux)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
57
Ejemplo 3.2
Utilizando una pila y una cola, realizar una funcin que reciba una cadena y devuelva el valor lgico verdad, si es un palndromo.
Si se meten todos los caracteres de la cadena al mismo tiempo en una pila y en una cola, al sacarlos de las dos estructuras de datos saldrn en orden inverso: los caracteres de la cola saldrn del primero al ltimo, los de la pila del ltimo al primero. Si todos los caracteres son iguales, se tratar de un palndromo.
La funcin longitud(cadena) devuelve el nmero de caracteres de una cadena.
o Por ejemplo, longitud(hola) devuelve 4.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
58
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
59
2. Se tiene una cola de procesos. Cada elemento contiene la prioridad (de 1 a 20) y un identificador de proceso nico. Se desea hacer un listado con el orden de salida de los procesos. 3. Se tiene una cola de procesos. Cada elemento contiene la prioridad (de 1 a 20) y un identificador de proceso nico. Se desea hacer un listado con el orden de salida de los procesos con prioridad p. 4. Se tiene una cola de procesos. Cada elemento contiene informacin sobre el identificador de proceso nico y su prioridad (de 1 a 20). Los elementos de la cola estn ordenados por prioridad. Disear un procedimiento que permita ordenar un nuevo proceso en la cola.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
60
Listas enlazadas
Estructura lineal de datos compuesta por un conjunto de nodos que ocupan posiciones no contiguas de memoria. Cada nodo contiene la informacin del componente y, al menos, un puntero que indica la posicin del siguiente nodo.
En el ltimo nodo, la posicin del siguiente elemento ser un puntero nulo. Al no ocupar posiciones contiguas en memoria y ser variable la posicin del primer nodo de la estructura, la lista tendr otro puntero que indicar la direccin del primer nodo de la estructura.
Pilas y colas son un tipo especial de listas enlazadas con la entrada y la salida limitadas.
En el caso de las listas enlazadas, las inserciones y eliminaciones se podrn hacer por cualquier punto de la estructura.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
61
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
62
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
63
sig
0 4
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
65
sig
0 4
sig
0 4
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
66
Una lista estar compuesta por un conjunto de listas, la ltima de la cuales estar vaca.
Sern listas, tanto el puntero que indica la direccin del primer elemento como cualquiera de los campo siguiente.
tipos = TipoElemento puntero_a nodo : Lista registro = nodo TipoElemento : info Lista : sig fin_registro
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
67
Procedimiento ListaNueva
procedimiento ListaNueva(ref lista : l) inicio l nulo fin_procedimiento
Funcin EsListaVaca
lgico funcin EsListaVaca(valor lista : l) inicio devolver(l = nulo) fin_funcin
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
68
Procedimiento LInsertar
procedimiento LInsertar(ref lista : l; valor TipoElemento : e) var lista : aux inicio reservar(aux) aux.sig l aux.info e l aux fin_procedimiento
El argumento l puede ser tanto puntero de inicio de la lista como cualquier de los campos sig de cada nodo.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
69
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
70
reservar(aux)
aux.sig aux.info
l e
aux
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
71
reservar(aux)
aux.sig aux.info
l e
aux
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
72
Procedimiento LPrimero.
Devuelve la informacin del primer elemento de la lista.
procedimiento LPrimero(valor lista : l; ref TipoElemento : e) inicio si l = nulo entonces // Error, la lista est vaca si_no e l.info fin_si fin_procedimiento
Es necesario comprobar si la lista tiene elementos (l <> nulo). El argumento l, puede ser tanto el puntero de inicio de la lista como cualquiera de los campos sig de cada nodo.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
73
l B C E F M
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
74
Procedimiento LSiguiente.
Devuelve la la direccin del siguiente nodo de la lista
procedimiento LSiguiente(valor lista : l; ref lista : siguiente) inicio si l = nulo entonces // Error, la lista est vaca si_no siguiente l.sig fin_si fin_procedimiento
Es necesario comprobar si la pila tiene elementos (p <> nulo). El argumento l, puede ser tanto el puntero de inicio de la lista como cualquiera de los campos siguiente.
LSiguiente(l.sig,siguienteNodo)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
75
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
76
Procedimiento LBorrar
Elimina el elemento al que apunta la lista pasada como argumento.
procedimiento LBorrar(ref lista : l) var lista : aux inicio si EsListaVaca(l) entonces // error, la lista est vaca si_no aux l l l.sig liberar(aux) fin_si fin_procedimiento
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
77
aux
l.sig
liberar(aux)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
78
aux
l.sig
liberar(aux)
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
79
Ejemplo 3.3
Utilizando las operaciones primitivas para trabajar con listas, disee las siguientes operaciones bsicas:
a. Un procedimiento que copie una lista. b. Una funcin que devuelva en nmero de elementos de una lista. c. Una funcin lgica que indique si un elemento pertenece a una lista. d. Una funcin qu busque un elemento en una lista. Si existe devolver su direccin, en caso contrario devolver un puntero nulo. e. Una funcin que devuelva la direccin del ltimo nodo de la lista. f. Un procedimiento que invierta una lista.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
80
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
81
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
82
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
83
84
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
85
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
86
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
87
A. Disee las estructuras de datos necesarias para realizar el problema. B. Escriba un procedimiento que permita leer un nmero binario desde teclado y almacenarlo en una lista enlazada de la forma indicada. C. Escriba un procedimiento que permita sacar el nmero por pantalla. D. Escriba un procedimiento que reciba dos nmeros binarios almacenados en una lista enlazada y devuelva otra lista enlazada con la suma de ambos.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
89
con la llamada subcadena(cad,3,4,scad), scad sera codr (una subcadena formada por los 4 caracteres a partir del carcter 3):
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
90
Listas ordenadas
Si se requiere que los elementos de la lista estn ordenados por algn criterio, se puede incluir un procedimiento para insertar un elemento ordenado en la lista y mejorar el procedimiento de borrar. Insertar Ordenado.
procedimiento InsertarOrdenado(ref lista : l; valor TipoElemento : e) var lista : act,ant lgico : encontrado inicio encontrado falso act l
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
91
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
92
93
2.
Se desea disear un mdulo que lea un polinomio, otro que lo escriba y otro que realice la suma de polinomios
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
94
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
95
Listas circulares
Una lista circular es una lista enlazada en la que el ltimo elemento de la lista apunta al primer elemento.
miLista LUIS ANA MANOLO
Su mayor utilidad est en poder insertar elementos al final de la lista sin necesidad de recorrer toda la lista.
El puntero a la estructura de datos deber apuntar al ltimo elemento.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
96
97
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
98
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
99
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
100
Listas dobles
Cada elemento tiene un puntero al siguiente elemento y un puntero al anterior, menos el primero que tiene un puntero anterior nulo y el ltimo que tiene un puntero siguiente nulo. La estructura del nodo es distinta.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
101
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
103
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
104
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
105
Otras realizaciones
Los tres modelos anteriores se pueden combinar.
Listas dobles circulares. Listas dobles con cabecera. Listas dobles circulares con cabecera.
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
106
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
107
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
108
Universidad Pontificia de Salamanca (Campus Madrid) Luis Rodrguez Baena, Escuela Superior de Ingeniera y Arquitectura, 2012
109