Introduccin. __________________________________________________ 2 Definicin, importancia y utilidad de las estructuras de datos ____________ 2 Importancia y utilidad de las estructuras de datos _____________________ 3 Clasificacin de las estructuras de datos ____________________________ 3 1. Arreglos __________________________________________________ 4 Estructura de un arreglo _______________________________________ 4 Elementos del arreglo _________________________________________ 5 ndices del arreglo ____________________________________________ 5 Declaraciones de un arreglo ____________________________________ 5 Iniciacin del arreglo __________________________________________ 6 Asignacin directa ____________________________________________ 6 Lectura de los elementos del arreglo. _____________________________ 7 Insercin elementos de arreglos con el uso de ciclos _________________ 7 Extraccin de elementos de los arreglos unidimensionales ____________ 8 Escritura de elementos del arreglo ______________________________ 10 Extraccin de elementos del arreglo con el uso de ciclos ______________ 11
M.C. Karla Torres Ramrez Estructura de Datos Tema 1
2
Introduccin.
En la prctica, la mayor parte de informacin til no aparece aislada en forma de datos simples, sino que lo hace de forma organizada y estructurada. Los diccionarios, guas, enciclopedias, etc., son colecciones de datos que seran intiles si no estuvieran organizadas de acuerdo con unas determinadas reglas. Adems, tener estructurada la informacin supone ventajas adicionales, al facilitar el acceso y el manejo de los datos. Por ello parece razonable desarrollar la idea de la agrupacin de datos, que tengan un cierto tipo de estructura y organizacin interna. Como tendremos ocasin de ver, la seleccin de una estructura de datos frente a otra, a la hora de programar es una decisin importante, ya que ello influye decisivamente en el algoritmo que vaya a usarse para resolver un determinado problema. Definicin, importancia y utilidad de las estructuras de datos
Concepto: una estructura de datos es, a grandes rasgos, una coleccin de datos (normalmente de tipo simple) que se caracterizan por su organizacin y las operaciones que se definen en ellos. Por tanto, una estructura de datos vendr caracterizada tanto por unas ciertas relaciones entre los datos que la constituyen (p.e., el orden de las componentes de un vector de nmeros reales), como por las operaciones posibles en ella. Esto supone que podamos expresar formalmente, mediante un conjunto de reglas, las relaciones y operaciones posibles (tales como insertar nuevos elementos o como eliminar los ya existentes). Por el momento y a falta de otros, pensemos en un vector de nmeros, como el mejor ejemplo de una estructura de datos.
Las estructuras de datos pueden ser de dos tipos: estructuras de datos estticas y estructuras de datos dinmicas. M.C. Karla Torres Ramrez Estructura de Datos Tema 1
3
ESTRUCTURAS DE DATOS ESTTICAS: Son aquellas en las que se asigna una cantidad fija de memoria cuando se declara la variable. En grandes ocasiones se necesitan colecciones de datos que crezcan y reduzcan su tamao en memoria a medida que el programa progrese. Esto se logra implementando las estructuras dinmicas.
ESTRUCTURA DE DATOS DINMICAS: Son aquellas cuya ocupacin en memoria puede aumentar o disminuir en tiempo de ejecucin Importancia y utilidad de las estructuras de datos
La programacin estructurada significa escribir un programa de acuerdo a las siguientes reglas. 1.-El programa tiene un diseo modular 2.-Los mdulos son diseados de un modo descendente 3.-Cada mdulo se codifica utilizando las tres estructuras de control bsicas: a) Secuencia b) Seleccin c) Repeticin La programacin estructurada se refiere a un conjunto de tcnicas que aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, depurar y mantener los programas. Utiliza un nmero limitado de estructuras de control que minimizan la complejidad de los programas y por consiguiente reducen los errores y hacen los programas en general ms eficientes. Clasificacin de las estructuras de datos
Estructuras de datos estticas
1.- Simples o primitivas M.C. Karla Torres Ramrez Estructura de Datos Tema 1
4
a) boolean b) char c) int d) real 2.- Compuestas a) Arreglos b) Conjuntos c) Strings (Cadenas) d) Registros e) Archivos
Estructura de datos dinmicas
1.- Lineales a) Pila b) Cola c) Lista
2.- No lineales a) rboles b) Grafos
1. Arreglos
Estructura de un arreglo
Un arreglo es una estructura de datos. En otras palabras, un arreglo consta de elementos de datos organizados o estructurados en una forma particular. Esta estructura de datos proporciona un medio conveniente para almacenar grandes M.C. Karla Torres Ramrez Estructura de Datos Tema 1
5
cantidades de datos en la memoria primaria o del usuario. Existen arreglos unidimensionales y multidimensionales.
Elementos del arreglo
Los elementos de un arreglo son los datos almacenados en ste y pueden ser de cualquier tipo de datos que se hayan visto. De esta manera, un arreglo dado puede almacenar elementos enteros, elementos de punto flotante, caracteres, y elementos booleanos. ndices del arreglo
Los ndices del arreglo localizan a los elementos del arreglo, en C, el compilador en forma automtica asigna ndices enteros a la lista de elementos del arreglo empezando con el ndice 0. Por lo tanto, el primer elemento del arreglo en la figura 1 se localiza en el ndice 0, y el ltimo elemento se localiza en el ndice n. Los ndices empiezan con 0 y van a n.
Figura 1.
Declaraciones de un arreglo
La sintaxis de declaracin de arreglos es: tipo nombre_arreglo [numero_de_elementos];
Los siguientes son dos ejemplos de declaraciones de arreglos vlidas en C: M.C. Karla Torres Ramrez Estructura de Datos Tema 1
6
int CoordenadasDePantalla[5]; /*Un arreglo de 5 enteros */ char IDCompania[20]; /*Un arreglo de 20 caracteres */
Figura 2. Arreglo CoordenadasDePantalla con ndices de desplazamiento vlido
En la figura 2 se muestra el primer arreglo que fue declarado con el tipo de nmeros enteros, llamado CoordenadasDePantalla, ocupa en memoria 5 localidades de memoria contiguas, cada una de ellas capaz de almacenar un nmero entero. Actualmente es comn que los nmeros enteros sean de 32 bits, esto hace que el arreglo CoordenadasDePantalla ocupe bits
Iniciacin del arreglo C proporciona 3 maneras de iniciar elementos del arreglo: asignacin directa, mediante lectura o usando ciclos. Asignacin directa. El formato general para insertar un elemento, dentro un arreglo, con asignacin directa es como sigue:
<nombre del arreglo>[ndice del arreglo] =valor del elemento;
Con las siguientes definiciones de arreglos: char caracteres[6]; int enteros[3]; M.C. Karla Torres Ramrez Estructura de Datos Tema 1
7
Las asignaciones directas pueden ser como estas: 1. caracteres[0] ='H'; 2. caracteres[5] ='\0'; 3. enteros[0] = 16; 4. enteros[2] = -22;
Lectura de los elementos del arreglo. Tambin es posible usar cualquiera de las funciones u objetos de entrada de C para insertar los elementos del arreglo desde un teclado, como sigue:
En este caso, el usuario deber escribir el valor del elemento del arreglo respectivo desde el teclado y oprimir la tecla ENTER para ejecutar cada enunciado. Deber escribir un carcter para el primer enunciado y un entero para el segundo (Por qu?) El carcter escrito desde el teclado se almacenar en la segunda posicin (ndice [1]) del arreglo caracteres, mientras que el entero escrito desde el teclado se almacenar en la primera posicin (ndice [0]) del arreglo enteros.
Insercin elementos de arreglos con el uso de ciclos. La desventaja obvia al usar asignaciones directas para insertar elementos de arreglos es que se requiere un enunciado de asignacin separado para llenar cada posicin del arreglo. Puede automatizar el proceso de insercin usando una estructura de ciclo. Aunque cualquiera de las tres estructuras de ciclo (while, do/while, for) se puede emplear, la estructura for es la ms comn. A continuacin est el formato general para el uso de un ciclo for:
for(int indice= 0; indice< tamao del arreglo; ndice++) M.C. Karla Torres Ramrez Estructura de Datos Tema 1
8
{ <asigna o lee arreglo[indice]> } Considere el siguiente programa: //LLENADO DE UN ARREGLO CON UN CICLO for
#include <stdio.h> // Para printf y scanf // DECLARA EL TAMAO DEL ARREGLO #define MAX 10; main() { int muestra[MAX]; // DEFINE UN ARREGLO ENTERO int i; printf( "Escriba una lista de %d elementos, MAX); for(i= 0; i< MAX; i++) { scanf(%d,&muestra[i]); } getch(); }
Extraccin de elementos de los arreglos unidimensionales.
ASIGNACIN DIRECTA. La extraccin de los elementos del arreglo usando enunciados de asignacin es lo inverso de la insercin de elementos utilizando un enunciado de asignacin. ste es el formato general:
Formato de asignacin directa (extraccin de elementos del arreglo) <identificador del objeto variable> = <nombre del arreglo>[ndice del arreglo] M.C. Karla Torres Ramrez Estructura de Datos Tema 1
9
Como ejemplo, suponga que se hacen las siguientes definiciones:
#define MAX 10; int muestra[MAX]; int x; Como puede observar, el arreglo muestra[] consta de 10 elementos enteros. Ahora, suponga que el arreglo est lleno, Qu harn los siguientes enunciados?
x = muestra[0]; x = muestra[MAX- 1]; x = muestra[3] * muestra[5]; x = 2 * muestra[2] -3 * muestra[7];
El primer enunciado asigna el elemento almacenado en la primera posicin del arreglo a la variable x. El segundo enunciado asigna el elemento almacenado en la ltima posicin del arreglo a la variable x. El tercer enunciado asigna el producto de los elementos localizados en los ndices [3] y [5] a x. Por ltimo, el cuarto enunciado asigna a x dos veces el elemento localizado en el ndice[2] menos tres veces el elemento localizado en el ndice [7]. Los ltimos dos enunciados muestran cmo se pueden realizar las operaciones aritmticas con los elementos del arreglo.
En todos los casos anteriores, los valores de los elementos del arreglo no se afectan por las operaciones de asignacin. El principal requerimiento es que x debe estar definida como el mismo tipo de datos de los elementos del arreglo para no obtener resultados inesperados. Como ejemplo final, considere estos enunciados de asignacin:
muestra[0] = muestra[MAX- 1]; M.C. Karla Torres Ramrez Estructura de Datos Tema 1
10
muestra[1] = Muestra[2] + Muestra[3];
Puede usted determinar qu pasa aqu? En el primer enunciado, el primer elemento del arreglo se reemplaza por medio del ltimo elemento del arreglo, se afecta el ltimo elemento del arreglo? No, porque aparece del lado derecho del operador de asignacin. En el segundo caso, el segundo elemento del arreglo en el ndice [1] se reemplaza por la suma del tercero y cuarto elementos del arreglo en los ndices [2] y [3]. De nuevo, el tercero y cuarto elementos del arreglo no se afectan por esta operacin, porque aparecen del lado derecho del operador de asignacin.
Escritura de elementos del arreglo. Los objetos printf se usan para mostrar los elementos del arreglo. Usemos el mismo arreglo para demostrar cmo escribir elementos del arreglo. Aqu est de nuevo la definicin del arreglo:
El primer enunciado mostrar el elemento contenido en el ndice [0] del arreglo. El segundo presentar el ltimo elemento del arreglo, localizado en el ndice[MAX 1]. El tercer enunciado dividir el elemento localizado en el ndice [1] entre el elemento en el ndice [2] y mostrar el cociente entero. Por ltimo, el cuarto M.C. Karla Torres Ramrez Estructura de Datos Tema 1
11
presentar la raz cuadrada del elemento localizado en el ndice [6]. Ninguno de los valores del elemento del arreglo se afectar con estas operaciones.
Extraccin de elementos del arreglo con el uso de ciclos. Al igual que en la insercin de elementos en un arreglo, la extraccin de elementos del arreglo con ciclos requiere menos codificacin, especialmente cuando se extraen elementos mltiples. De nuevo, se puede usar cualquier estructura de ciclo para este propsito, pero los ciclos for son los ms comunes.
Considere el siguiente programa:
// MUESTRA UN ARREGLO CON UN CICLO for #include <stdio.h> // Para printf y scanf // ENUNCIA EL TAMAO DEL ARREGLO #define MAX 10; main() { int muestra[MAX]; // DEFINE UN ARREGLO ENTERO for(int i= 0; i< MAX; ++i) muestra[i] = i *i; for(int i= 0; i< MAX; ++i) printf(%d,muestra[i]); getch(); } // FINAL DE main()