Bienvenidos a un nuevo curso. Ahora estoy en el ciclo de grado superior: Desarrollo de aplicaciones multiplataforma. Y voy a ser parte del experimento de la formación dual. Estaré haciendo practicas durante un año, y a la vez finalizando la formación.

Deseadme suerte.

miércoles, 14 de enero de 2015

Estructuras de datos dinámicas

0

Tema 8b > particularizado para el caso de C

Estructura de datos
Una estructura de datos es una colección de datos organizados de una determinada manera.
Ejemplo: entero, real, vector (de...), registro, matriz, fichero (de...), ..., lista, cola, árbol...
Si tengo que trabajar con varios datos iguales en memoria, a veces un vector se queda demasiado grande, o demasiado pequeño. Si yo tengo un fichero de datos y quiero pasarlo a memoria para trabajar con él, si uso un vector, me puede ocurrir que sea insuficiente en cuanto a tamaño, o que esté desperdiciando la mayor parte de él.

Tipos de estructuras de datos
ED estáticas
- Una vez definidas no pueden variar.
- El contenido puede variar, pero no la estructura.
- Tamaño fijo, ya sea mediante...
     * Variables estáticas (tamaño fijado en compilación).
     * Variables dinámicas (tamaño fijado en ejecución).
ED dinámicas
- Podemos cambiar la estructura en cualquier momento.
- Tamaño aumenta o disminuye según se va ejecutando el programa y varían las necesidades.

¿Estructuras estáticas?
Inconvenientes de las estructuras estáticas (como un vector):
- Tamaño no puede aumentar ni disminuir. Hay que predecir el tamaño necesario.
- Reorganizar la lista de elementos implica mover muchos elementos. Es costoso.
Si tenemos una lista de elementos ordenados y queremos insertar uno nuevo manteniendo el orden:
- Con un vector:
     * Primero tenemos que disponer de espacio para el nuevo elemento (y puede ser que no tengamos).
     * Segundo tenemos que desplazar todos los elementos que están después de él en el orden para mantenerlo.
- con una EDD:
     * Siempre podemos insertar un nuevo elemento (salvo limitación de recursos).
     * Podemos insertar en cualquier posición, con coste bajo.

Tipos de EDD
Lineales: que aumentan su tamaño en una única dimensión:
- Listas
- Pilas
- Colas
No lineales: Que aumentan su tamaño en varias dimensiones:
- Árboles
- Grafos

Uso de las EDD
Las EDD no están directamente soportadas por el lenguaje. Tenemos que programarlas nosotros:
- Definir las estructuras de datos necesarias.
- Implementar las funciones y procedimientos que realicen las operaciones sobre las estructuras de datos que hemos definido.

El tipo de datos Lista
Concepto: Secuencia finita de cero o más elementos de un tipo determinado.
a1, a2, ..., an     n>=0
Cada a¡ es del tipo de los elementos de la lista.
n: longitud de la lista
- Si n=0: lista vacía.
- Si n>=1:a1 es el primer elemento y an es el último elemento.
Dado un elemento a¡, decimos que a¡ precede o es predecesor de a¡+1 y que a¡ sucede o es el sucesor de a¡-1.

Operaciones sobre una lista
Inicializar
Insertar (al principio, al final, o en una determinada posición)
Eliminar
Recorrer la lista
Tamaño
Recuperar (información de una posición concreta)
Localizar (posición a partir de información)
Copiar (una lista en otra)
...

Implementación del tipo de datos Lista
La lista nos la implementamos nosotros, así que lo hacemos como queremos de acuerdo con nuestras necesidades.
Una opción posible es implementarla como una lista enlazada.

Lista enlazada
Cada elemento de la lista se almacena en un nodo, que es una estructura.
Los nodos se identifican por su posición, que es una dirección de memoria, a la que algo apuntará.
Los nodos contienen un elemento de la lista y la posición al siguiente nodo.
El nodo que contiene el último elemento de la lista tiene NULL en el campo "SIGUIENTE NODO".
La lista es un puntero al primer elemento.

Definición de la lista
struct info {
.../* Rellenar con toda la información que deba contener un elemento de la lista */
}
struct nodo {
     struct info elemento;
     struct nodo *siguiente;
}
struct nodo *lista;

Inicializar lista
list=NULL;

Insertar al principio
Void insertarPrincipio (struct nodo **L, struct info *X){
     struct nodo *tmp;
     tmp=(struct nodo *) malloc (sizeof(struct nodo));
     tmp->elemnto=*X;
     tmp->siguiente=*L;
     *L=tmp;
}

Yo no he trabajado con punteros (solo copiado la teoría) y si no entiendes punteros, no alcanzas esto, esta dando una larga explicación... y yo me estoy quedando igual. Habrá que insistir en un futuro... No temo volver a preguntar cuando este preparada.
Es obligado hacer dibujo!

Deberes: ¿Como harías para insertar un elemento al final de la lista? ¿Como añadir a una posición cualquiera?


0 comentarios:

Publicar un comentario

Etiquetas actuales

BD (67) DEF (64) PROG (64) SQL (44) Java (29) PRACTICAS (20) php (18) DI (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) HTML (13) SGE (12) ERP (9) CONSULTAS (8) css (8) Linux (5) XML (5) Android (4) PDM (4) C (3) NetBeans (3) PSP (3) SMARTY (3) comandos (3) HOOK (2) POST (2) XSD (2) cURL (2) JS (1) MEDIA-QUERYS (1) PDO (1) RESPONSIVE (1) TPL (1) TRADUCCIÓN (1) app_inventor (1)

Todas las etiquetas

EJER (78) BD (67) DEF (64) PROG (64) SQL (44) c# (40) Programación (39) Ficheros (36) Java (29) bases de datos (21) PRACTICAS (20) lenguajes de marcas (19) AD (18) Entorno de desarrollo (18) php (18) PROCEDIMIENTOS (17) DI (16) FORM (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) lenguaje C (16) E/R (14) HTML (13) SGE (12) Sistemas informáticos (10) ERP (9) CONSULTAS (8) TRANSACCIONES (8) TRIGGER (8) VISUAL BASIC (8) css (8) FUNCIONES (7) html5 (6) Ada (5) EXAMEN (5) Linux (5) XML (5) estructuras (5) Android (4) DISEÑO (4) INTERFAZ (4) LOG (4) OpenBravo (4) PDM (4) ACTUALIZAR (3) C (3) DIAGRAMA (3) Directorios (3) NEW (3) NOR (3) NetBeans (3) OLD (3) PSP (3) SMARTY (3) comandos (3) css3 (3) AISLAMIENTOS (2) C++ (2) CONTROLERRORES (2) ELIMINAR (2) HOOK (2) INSERTAR (2) INST (2) MULTITABLA (2) POST (2) RECURSIVIDAD (2) SUBCONSULTAS (2) VISTAS (2) XSD (2) cURL (2) punteros (2) AJENA (1) BLOQUEOS (1) Byte (1) CREACION (1) CRM (1) Configuración (1) Controles (1) Datos (1) GOTFOCUS (1) IMAGENES (1) INDICES (1) JS (1) Lenght (1) MEDIA-QUERYS (1) Mingw (1) MonoDeveloped (1) OPTIMISTA (1) PDO (1) PESIMISTA (1) RESPONSIVE (1) SPEAK (1) Scanner (1) Serializacion (1) Streams (1) System (1) TPL (1) TRADUCCIÓN (1) USUARIOS (1) UseSystemPasswordChar (1) app_inventor (1) char (1) examenes (1) libreoffice (1) make (1) redes (1)