Академический Документы
Профессиональный Документы
Культура Документы
Lista
Lista de la compra del supermercado Lista de tareas u obligaciones que hacer Lista de invitados
La lista enlazada es un TDA que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinmica, por lo que no tenemos que saber "a priori" los elementos que puede contener.
Operaciones bsicas:
Visualizar su contenido.
Buscar la posicin de la primera ocurrencia de un elemento. Insertar y Eliminar un elemento en alguna posicin. Buscar_k_esimo, que devuelve el elemento
de la posicin indicada
Algoritmos
Crear la lista vaca constructor crearLista; primero:= nulo; ultimo:= nulo; num:= 0; fconstructor
Aadir un elemento por la derecha accin aadeDch (e: elemento); var nuevo: ptrNodo fvar si esVaca entonces creaUnitaria (e) sino reservar (nuevo, creaNodo(e, nulo)); ltimo^.setSig(nuevo); ltimo:= nuevo; num:= num + 1; fsi faccin
Tiene que declararse el tamao de la lista. Exige sobrevaloracion. Consume mucho espacio. Complejidad computacional de las operaciones: Buscar_k_esimo, tiempo constante Visualizar y Buscar, tiempo lineal. Insertar y Eliminar son costosas. Insertar o eliminar un elemento exige, en promedio, desplazar la mitad de los valores, O(n). La construccin de una lista o la eliminacin de todos sus elementos podra exigir un tiempo cuadrtico.
DESCRIBIR LOS MECANISMOS MEDIANTE LOS CUALES LOS LENGUAJES DE PROGRAMACIN PERMITEN IMPLEMENTAR LAS LISTAS.
Implementacin
Para representar en lenguaje C esta estructura de datos se utilizarn punteros, un tipo de datos que suministra el lenguaje. Se representar una lista vaca con la constante NULL. Se puede definir la lista enlazada de la siguiente manera:
struct lista { int clave; struct lista *sig; };
DESCRIBIR CMO LOS LENGUAJES QUE NO MANEJAN APUNTADORES SIMULAN LAS LISTAS DOBLEMENTE ENLAZADAS.
Cada nodo apunta al siguiente y al anterior. Duplica el uso de la memoria necesaria para los punteros. Duplica el coste de manejo de punteros al insertar y eliminar. La eliminacin se simplifica. No es necesario buscar el elemento anterior.
PILA
Siempre que se hacen implementacin fsicas que se encuentren mas cerca de la forma mas fcil para la ejecucin del mismo por ejemplo: Cuando se montan y desmontan cajas de un camin. Romper filas para salida si se encuentran mas cerca de la salida, entonces el ultimo sale primero al voltear la posiciones en la lnea.
PILA pilaVacia() apilar(ENTSAL PILA lapila, ENT ELEMENTO elem) Observadores basicos: booleano vacia(PILA lapila) ELEMENTO tope(PILA lapila)
Precondicion: : vacia(lapila).
Otras operaciones: entero tamao(PILA lapila) desapilar(ENTSAL PILA lapila)
Precondicion: : vacia(lapila).
DESCRIBIR
Los tipos que definiremos normalmente para manejar pilas sern casi los mismos que para manejar listas, tan slo cambiaremos algunos nombres:
typedef struct _nodo \{ int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Pila;
COLA
Las filas de los bancos Las filas de las escuelas Cola de impresin
Observadores basicos:
booleano vacia(COLA lacola) ELEMENTO comienzo(COLA lacola) Precondicion: : vacia(lacola). Otras operaciones: entero tama~no(COLA lacola) desencolar(ENTSAL COLA lacola) Precondicion: : vacia(lacola).
Cola de prioridad El TAD Cola de Prioridad tiene la misma interfaz que el TAD Cola pero distinta semntica. De nuevo, la interfaz es: __init__ Iniciar una nueva cola vaca. insertar Aadir un nuevo elemento a la cola. eliminar Eliminar y devolver un elemento a la cola. El elemento devuelto es el que tiene la prioridad ms alta. estaVacio Comprobar si la cola est vaca.
La diferencia semntica est en que el elemento eliminado de la lista no es, necesariamente, el primero que fue aadido. Ms bien, es el elemento de la cola que tiene la prioridad ms alta. En la implementacin de la Cola de Prioridad no se especifica ni qu son las prioridades ni cmo se comparan entre ellas. Depende de los elementos que haya en la cola. Por ejemplo, si los elementos de la cola tienen nombres, podemos elegirlos en orden alfabtico. Si son puntuaciones de bolos, podemos ir desde la ms alta hasta la ms baja, pero si son puntuaciones de golf, iramos desde la ms baja hasta la ms alta. Mientras podamos comparar los elementos de la cola, podremos encontrar y eliminar el de mayor prioridad. Esta implementacin de Cola de Prioridad tiene como atributo una lista de Python que contiene los elementos de la cola. class ColaDePrioridad: def __init__(self): self.elementos = [] def estaVacio(self): return self.elementos == [] def insertar(self, elemento): self.elementos.agregar(elemento)