Académique Documents
Professionnel Documents
Culture Documents
Estructuras de datos
Datos
Los datos son una parte activa de las operaciones y planes de las organizaciones. Las decisiones se toman con base a la informacin que proporcionan los datos. A los resultados de las decisiones se les llama acciones, que producen datos que se pueden incorporar despus a otro ciclo del proceso de toma de decisiones. Las decisiones pueden ser operacionales, de control o de planificacin. Los mismos elementos de datos pueden participar en la produccin de informacin para apoyar a los tres niveles de toma de decisiones. Los datos se deben estructurar correctamente para que sean accesibles y que sirvan como respuesta a las posibles preguntas. Los datos deben ser manejados de tal manera que sean correctos y estn disponibles para producir informacin.
Estructura de datos
Una estructura de datos es una clase de datos que se puede caracterizar por su organizacin y operaciones definidas sobre ella. En un programa, cada variable pertenece a alguna estructura de datos explcita o implcitamente definida, la cual determina el conjunto de operaciones vlidas para ella. Cada estructura de datos puede tener varias representaciones fsicas diferentes para sus almacenamientos posibles. Para cada estructura de datos que consideremos, se introducirn varias formas posibles de almacenamiento. Estructuras primitivas y simples. Las estructuras de datos primitivas no estn compuestas por otras estructuras: enteros, booleanos y caracteres. Las estructuras de datos simples se construyen a partir de estructuras primitivas: cadenas, matrices y registros. Las estructuras de datos simples se pueden combinar de varias maneras para formar estructuras ms complejas. Las estructuras de datos complejas pueden ser lineales y nolineales, dependiendo de las complejidad de las relaciones lgicas que representan. Las estructuras de datos lineales incluyen listas, pilas y colas. Las estructuras de datos no lineales incluyen los rboles, grafos y montculos. Muchos lenguajes de programacin ofrecen al programador un conjunto predefinido de estructuras de datos. En otros, el programador puede definir sus propias estructuras (por ejemplo en Pascal con el enunciado type y en Lenguaje C con el enunciado struct. Una de las diferencias ms notables entre estructuras de datos proporcionadas por el lenguaje y definidas por el programados, es la validacin de las operaciones sobre las estructuras de datos.
4
Las matrices son un conjunto finito ordenado de elementos homogneos. Los elementos de una matriz son referenciados segn sus posiciones. Las matrices pueden se unidimensionales y multidimensionales. Se pueden efectuar operaciones sobre los elementos individuales o sobre la matriz. Los registros son colecciones finitas y ordenas de elementos, posiblemente heterogneos, que se tratan como una unidad (en C se denominan estructuras). Los campos son reas especficas de un registro. Los elementos del registro se pueden referenciar de forma individual en un programa. Los registros son importantes porque pueden preservar la estructura lgica natural de los elementos de informacin relacionados.
5
Se puede borrar un elemento o insertar en cualquier posicin de la lista. As la lista puede crecer o decrecer al transcurrir el tiempo. Una pila es un caso especial de una lista lineal en el cual, la insercin o supresin son operaciones que slo pueden ocurrir en un extremos de la pila, el cual se denomina como tope de la pila. Existen cuatro operaciones bsicas que son vlidas para el tipo de datos pila: crear, pila_vaca, insertar y sacar. Las pilas pueden emplearse en la solucin de problemas que necesitan de una estructura de datos tipo ltimo-que-entra-primero-que-sale. Una cola es un caso especial de una lista lineal en el cual, la insercin se hace estrictamente por un extremos de la lista, al cual podemos llamar fondo, la supresin slo puede hacerse por el otro extremo de la lista, al cual llamamos frente. Existen cuatro operaciones bsicas que son vlidas para el tipo de datos cola: crear, cola_vaca, insertar y sacar. Las colas se usan ampliamente en operaciones de computadoras, por ejemplo, en la seleccin del siguiente trabajo a atender, en la seleccin del siguiente archivo a imprimir en la impresora, Las estructuras de datos complejas se pueden almacenar como estructuras estticas (matrices) o dinmicas.
6
Estructuras de datos
Estructuras de datos lineales: son aquellas estructuras de datos en que cada elemento tiene como mucho dos elementos adyacentes (posterior y/o anterior): pilas, colas o listas. Estructuras de datos no lineales: son aquellas estructuras de datos cuyos elementos pueden tener ms de dos elementos adyacentes, a los que puede acceder directamente: rboles, montculos o grafos.
Lista lineal
Una lista lineal es una estructura de datos formada por un conjunto de elementos ordenados, el nmero de elementos de la lista puede variar durante la ejecucin del programa segn las necesidades prevista en el mismo. Cada elemento debe almacenar informacin de donde est el siguiente elemento o el anterior, o bien ambos. En funcin de esta informacin las listas pueden clasificarse en: listas simplemente enlazadas, listas circulares, listas doblemente enlazadas y listas circulares doblemente enlazadas.
Lista lineal simplemente enlazada es una coleccin de objetos, cada uno de los cuales contiene datos o un puntero a los datos y un puntero al siguiente objeto en la coleccin.
Operaciones bsicas:
Insertar un elemento en una lista. Buscar un elemento en una lista. Borrar un elemento en una lista. Recorrer los elementos de una lista. Borrar todos los elementos de una lista.
10
12
Antes de borrar el elemento apuntado por q, hacemos que p apunte al siguiente elemento para no perder el resto de la lista.
13
Lista lineal
Lista circular es una coleccin de objetos, cada uno de los cuales contiene datos o un puntero a los datos y un puntero al siguiente objeto en la coleccin. El ltimo objeto apunta al primero. Es posible acceder a cualquier elemento de la lista desde cualquier punto dado.
En la lista doblemente enlazada cada elemento tiene informacin de dnde se encuentra el elemento posterior y el elemento anterior. Esto permite leer la lista en ambas direcciones. En la lista circular doblemente enlazada cada elemento tiene informacin de dnde se encuentra el elemento posterior y el elemento anterior. El ltimo objeto apunta al primero y el primero al ltimo.
14
Pilas (1)
Una pila es una secuencia de elementos en la cual el ltimo en entrar es el primero en salir (LIFO, last in first out). La insercin o supresin slo se efecta en el extremo libre de la pila. Ejemplo de implementacin como una lista enlazada en lenguaje C (slo se necesita un puntero extremo al principio de la pila).
typedef struct dato_pila { int dato; //puede ser el dato o un puntero al dato. struct dato_pila *anterior; } elemento_pila; typedef struct { elemento_pila *extremo;} Pila; void iniciar_pila (Pila *pila) //iniciar la pila poniendo extremo a NULL { pila->extremo=NULL; } int pila_vacia(Pila *pila) //comprueba si la pila est vaca. { if (pila->extremo==NULL) return(1); else return(0); }
15
Pilas (2)
int apilar (Pila *pila, int elemento) { //aadir elemento a la pila por el extremo. elemento_pila *nuevo; nuevo=(elemento_pila *)malloc(sizeof(elemento_pila)); nuevo->dato=elemento; nuevo->anterior=pila->extremo; pila->extremo=nuevo; int desapilar (Pila *pila) { //si la pila no est vaca, toma el elemento del extremo y libera memoria. elemento_pila *borrar; tipo_dato_cola x; if (pila_vacia(pila)==1) return(0); borrar = pila->extremo; x=(pila->extremo)->dato; pila_extremo=(pila->extremo)->anterior; free(borrar); return(x); }
16
Colas (1)
Una cola es una secuencia de elementos en la cual el primero en entrar es el primero en salir (FIFO, first in first out). La insercin se hace por un extremo de la lista (por el final) y la supresin se hace por el otro extremo de la lista (por el principio). Ejemplo de implementacin como una lista enlazada en lenguaje C:
typedef struct dato_cola { int dato; //puede ser el dato o un puntero al dato. struct dato_cola *siguiente; } elemento_cola; typedef struct { elemento_cola *inicio, *final;} Cola; void iniciar_cola (Cola *cola) //iniciar la cola poniendo inicio y final a NULL { cola->inicio=cola->final=NULL; } int cola_vacia(Cola *cola) //comprueba si la cola est vaca. { if (cola->inicio==NULL) return(1); else return(0); }
17
Colas (2)
int aadir_elemento_cola (Cola *cola, int elemento) { //aadir elemento: pedir memoria. elemento_cola *nuevo; nuevo=(elemento_cola *)malloc(sizeof(elemento_cola)); nuevo->dato=elemento; nuevo->siguiente=NULL; if (cola_vacia(cola)) { cola->inicio=cola->final=nuevo;} else { (cola->final)->siguiente=nuevo; cola->final=nuevo; }} int sacar_elemento_cola (Cola *cola) { //coger el inicio de la cola, hacer que su siguiente sea el nuevo //inicio y liberar su memoria asignada. elemento_cola *borrar; tipo_dato_cola elemento; if (cola_vacia(cola)==1) return(0); borrar = cola->inicio; elemento=borrar->dato; cola_inicio=(cola->inicio)->siguiente; free(borrar); return(elemento); }
18
rboles
Un rbol es un conjunto de cero o ms nodos que cumplen:
Existe un nodo especial llamado raz. Los nodos restantes estn separados en n conjuntos distintos, cada uno de los cuales es a su vez un rbol (subrboles).
Elementos de un rbol:
Nodos: elementos del rbol que almacenan informacin. Conexiones: expresan las relaciones entre los nodos.
19
Un rbol nulo es un rbol sin nodos. Un rbol es completo si para una altura tiene el mximo nmero posible de nodos. Recorrer un rbol consiste en visitar (y procesar) cada uno de los nodos que lo componen una sola vez y en un determinado orden.
Mtodo preorden. Mtodo inorden. Mtodo postorden.
Estos nombres derivan del lugar en el que se visita la raz con respecto a sus subrboles.
20
Mtodo inorden:
Recorrer el subrbol izquierdo en inorden. Visitar el nodo (y procesarlo). Recorrer el subrbo derecho en inorden.
Mtodo inorden:
Recorrer el subrbol izquierdo en postorden. Recorrer el subrbo derecho en postorden. Visitar el nodo (y procesarlo).
21
22
24
Lenguaje de programacin C
25