Sunteți pe pagina 1din 2

Operaciones sobre Listas en Programación

Imperativa
Algoritmos y Estructuras de Datos I
Primer cuatrimestre de 2004

1. Introducción
En el lenguaje de imperativo que usaremos en la práctica, una lista será un
tipo abstracto de datos implementado como una clase. Las operaciones que
esta clase ofrece están descritas en esta nota. No usaremos la sintaxis de
C++ para referirnos a los métodos de la clase, sino que usaremos la notación
clásica. Ası́, para invocar al método agregar, no escribiremos l.agregar(x)
sino agregar(l,x).
Utilizaremos el tipo compuesto Listahαi para especificar operaciones so-
bre la clase list. En esta nota, consideraremos siempre un tipo α con igualdad.

2. Declaración
La declaración

α list L;

define lista L de elementos de tipo α, igual a la lista vacı́a. Por lo tanto, la


postcondición de esta declaración es

{|L| = 0}
En la práctica trabajaremos con listas con tipos paramétricos. Esto último
es otra diferencia con respecto a C++, en donde no instanciaremos listas en
tipos sino que trabajaremos siempre con listas de tipos fijos.

1
3. Métodos de Lista
un procedimiento que permite agregar un elemento e al principio de
una lista L:

void agregar (α list L , α e)
L : Listahαi = agregar(L : Listahαi, e : α)
P ≡ {igualesL(L, L0 ) ∧ e = e0 }
Q ≡ {|L| = |L0 | + 1 ∧ φ0 (L) = e0 ∧ (∀i : Z)(0 < i < |L| → φi (L) =
φi−1 (L0 ))}
un procedimiento que elimina el primer elemento de una lista L:

void cola (α list L )
L : Listahαi = cola(L : Listahαi)
P ≡ {igualesL(L, L0 )}
Q ≡ {|L| = |L0 | − 1 ∧ (∀i : Z)(0 ≤ i < |L| → φi (L) = φi+1 (L0 ))}
una función que retorna el primer elemento de una lista L:
α primero(α list L)
∆ : α = primero(L : Listahαi)
P ≡ {igualesL(L, L0 ) ∧ |L0 | > 0}
Q ≡ {∆ = φ0 (L0 )}
una función que retorna un int con la longitud de una lista L:
int long (α list L)
∆ : Z = long(L : Listahαi)
P ≡ {igualesL(L, L0 )}
Q ≡ {∆ = |L0 |}
un operador infijo que permite asignar listas:

void operator = (α list L , α list M)
L : Listahαi = = (M : Listahαi)
P ≡ {igualesL(M, M 0 )}
Q ≡ {igualesL(L, M 0 )}
Esta asignación tiene notación infija. Ası́, la instrucción L = M modifica
los estados de la siguiente manera:
{igualesL(L, L0 ) ∧ igualesL(M, M 0 )}
L = M;
{igualesL(L, M 0 ) ∧ igualesL(M, M 0 )}

S-ar putea să vă placă și