Sie sind auf Seite 1von 8

Instituto Tecnolgico de Tijuana Ingeniera en Sistemas Computacionales Estructura de Datos Portafolio: Unidad I Introduccin a las estructuras de datos

Tijuana, B.C. a mircoles 4 de septiembre de 2013

1.1 Tipos de estructuras de datos


En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son:

Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma secuencial o binario (siempre y cuando los datos estn ordenados).

Otras operaciones que se pueden realizar son:


Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos. Ejemplos: Matriz Lista o Lista simple o Lista doblemente enlazada o Lista circular Arboles o Arboles Binarios o Arboles biselados o Arboles multicamino Grafos Tablas Hash

Clasificacin: 1. No lineales (arboles, grafos) y lineales (pilas, colas, listas). 2. Estticas (arreglos, registros, cadenas) y dinmicas (lista, rbol, grafo, archivo).

3. Contiguas y enlazadas 4. Primitivas (char, int, bool) y simples (cadenas, arreglos, registros) 5. Homognea y heterognea Programa que utliza una Pila como estructura, es lineal, dinmico, contiguo, simple y homognea:
public static Stack<int> NC() { Stack<int> PilaNC = new Stack<int>(); PilaNC.Push(14253); PilaNC.Push(13658); PilaNC.Push(20014); return PilaNC; } public static Stack<string> Empleados() { Stack<string> PilaE = new Stack<string>(); PilaE.Push("Rodriguez Espejo Luis"); PilaE.Push("Carrillo Castillo Cesar"); PilaE.Push("Eguiarte Vazquez Adrian"); return PilaE; } static int opcion = 0; static void Main(string[] args) { var PE = Empleados(); var PNC = NC(); do { Console.Clear(); Console.WriteLine("Menu Empleados"); Console.WriteLine("\n\n1. Ver ultimo empleado contratado"); Console.WriteLine("2. Despedir ultimo empleado contratado"); Console.WriteLine("3. Salir del programa"); Console.Write("\nOpcion seleccionada: "); opcion = Int16.Parse(Console.ReadLine());

switch (opcion) { case 1: Console.Clear(); if (PE.Count>0 && PNC.Count>0) { Console.WriteLine("Numero de Control: " + PNC.Peek()); Console.WriteLine("Nombre del empleado: " + PE.Peek()); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } else { Console.WriteLine("\n\nNo hay empleados..."); Console.WriteLine("\nPresiona <Enter> regresar al menu...");

Console.ReadKey(); } break; case 2: Console.Clear(); if (PE.Count > 0 && PNC.Count > 0) { Console.WriteLine("Empleado despedido: " + PE.Pop()); Console.WriteLine("Numero de Control: " + PNC.Pop()); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } else { Console.WriteLine("\n\nNo hay empleados..."); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } break; case 3: Console.Clear(); Console.WriteLine("Presiona <Enter> para salir del programa..."); Console.ReadKey(); break; default: Console.Clear(); Console.WriteLine("Opcion invalida \nPresiona <Enter> regresar al menu..."); Console.ReadKey(); break; } } while (opcion != 3); }

1.2 Manejo de memoria esttica


Es la memoria que se reserva en el momento de la compilacin antes de comenzar a ejecutar el programa. Los objetos son creados al iniciar el programa y destruidos al finalizar el mismo. Mantienen la misma localizacin en memoria durante todo el transcurso del programa hasta que son destruidos. Ejemplos de utilizan la este tipo de memoria son variables primitivas (float, bool, int, char), variables globales, variables static, miembros static de una clase. La forma ms fcil de almacenar el contenido de una variable en memoria en tiempo de ejecuciones en memoria esttica o permanente a lo largo de toda la ejecucin del programa. No todos los objetos (variables) pueden ser almacenados estticamente. Para que un objeto pueda ser almacenado en memoria esttica su tamao (nmero de bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilacin, como consecuencia de esta condicin no podrn almacenarse en memoria esttica:

o o

Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilacin no se sabe el nmero de variables que sern necesarias. Las estructuras dinmicas de datos tales como listas, rboles, etc. ya que el nmero de elementos que las forman no es conocido hasta que el programa se ejecuta.

Las tcnicas de asignacin de memoria esttica son sencillas. A partir de una posicin sealada por un puntero de referencia se aloja el objeto X, y se avanza el puntero tantos bytes como sean necesarios para almacenar el objeto. La asignacin de memoria puede hacerse en tiempo de compilacin y los objetos estn vigentes desde que comienza la ejecucin del programa hasta que termina. En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetos de estos subprogramas puedan almacenarse estticamente se aloja en la memoria esttica un registro de activacin correspondiente a cada uno de los subprogramas. Estos registros de activacin contendrn las variables locales, parmetros formales y valor devuelto por la funcin. Ventajas: Velocidad de acceso alta Ms Fcil de disear Utiliza lgica Simple

Desventajas: Menor capacidad Mayor costo por bit No se puede modificar el tamao de la estructura en T.D.E No es ptima para grandes cantidades de datos Desperdicia memoria cuando no se utiliza la totalidad del tamao

1.3 Manejo de memoria dinmica


Definicin: La memoria dinmica se refiere a aquella memoria que no puede ser definida ya que no se conoce o no se tiene idea del nmero de la variable a considerarse, la solucin a este problema es la memoria dinmica que permite solicitar memoria en tiempo de ejecucin, por lo que cuanta ms memoria se necesite, ms se solicita al sistema operativo. El sistema operativo maneja la memoria gracias al uso de punteros, por la misma naturaleza del proceso nos impide conocer el tamao de la memoria necesaria en el momento de compilar. El operador new reserva memoria y el operador delete libera. Un dato importante es que como tal este tipo de datos se crean y se destruyen mientras se ejecuta el programa y por lo tanto la estructura de datos se va dimensionando de forma precisa a los requerimientos del programa, evitndonos as perder datos o desperdiciar memoria si hubiramos tratado de definirla cantidad de memoria a utilizar en el momento de compilar el programa.

Cuando se crea un programa en el que es necesario manejar memoria dinmica el sistema operativo divide el programa en cuatro partes que son: texto, datos (estticos), pila y una zona libre o heap. En la ltima parte es donde queda la memoria libre para poder utilizarla de forma dinmica. En el momento de la ejecucin habr tanto partes libres como partes asignadas al proceso por lo cual si no se liberan las partes utilizadas de la memoria y que han quedado inservibles es posible que se agote esta parte y por lo tanto la fuente de la memoria dinmica. Tambin la pila cambia su tamao dinmicamente, pero esto no depende del programador sino del sistema operativo. Ventajas: Mayor Capacidad Menor costo por bit Menor consumo de potencia No se da un tamao fijo al programa

Desventajas: La velocidad de acceso es baja Necesita recargar de la informacin almacenada para retenerla Diseo complejo No se conoce el tamao de memoria que utilizara

Programa ejemplo:
static void Main(string[] args) { string nomb; int opcion; Stack<string> S = new Stack<string>(); do { Console.Clear(); Console.WriteLine("Menu Programa Pila"); Console.WriteLine("\n1. Agregar nombre al tope"); Console.WriteLine("2. Borrar ultimo nombre agregado"); Console.WriteLine("3. Ver nombre del tope"); Console.WriteLine("4. Salir"); if (S.Count > 0) { Console.WriteLine("\n\nNombres en la pila:"); foreach (string nombre in S) { Console.WriteLine(" " + nombre); } } Console.Write("\nOpcion seleccionada: "); opcion = Int16.Parse(Console.ReadLine()); switch (opcion) { case 1: Console.Write("Nombre a ingresar: ");

nomb = Console.ReadLine(); S.Push(nomb); break; case 2: if (S.Count > 0) { Console.WriteLine("Nombre borrado: " + S.Pop()); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } else { Console.WriteLine("\n\nLa pila esta vacia"); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } break; case 3: if (S.Count > 0) { Console.WriteLine("Nombre del tope: " + S.Peek()); Console.WriteLine("\nPresiona <Enter> regresar al menu..."); Console.ReadKey(); } else { Console.WriteLine("\n\nLa pila esta vacia"); Console.WriteLine("\nPresiona <Enter> regresar al men..."); Console.ReadKey(); } break; case 4: Console.WriteLine("Presiona <Enter> para salir del programa..."); Console.ReadKey(); break; default: Console.WriteLine("Opcin invalida Presiona <Enter> regresar al menu..."); Console.ReadKey(); break; } } while (opcion != 4); }

1.4 Manejo de memoria local


La memoria local se aloja en el rea de la pila de la memoria, es utilizada para argumentos en funciones y variables locales, y es el sistema operativo el que gestiona automticamente la asignacin y desasignacin de esta. Se crean los objetos al entrar a la funcin y se destruyen al salir de ella. En algunos lenguajes es necesario utilizar la palabra reservada auto y register. Cuando se enva un parmetro a una funcin se crea una copia del dato en la memoria, lo que duplica el uso de la memoria. Si la funcin es recursiva, cada llamada a ella genera un juego de celdas de memoria

independientes de las que estn usando las llamadas anteriores, lo que podra saturar el uso de la memoria local en un momento dado. Es recomendable iniciar las variables locales con un valor valido antes de usarlas para evitar posibles errores en la ejecucin del programa. Programa:
static float PickPocket(float Hab, float P) { Random Suerte = new Random(); float Res; int SuerteL= Suerte.Next(1,15); int SuerteV = Suerte.Next(1, 10); return Res = (SuerteL / SuerteV) * (Hab- P*2); } static void Main(string[] args) { char resp = 'n'; float peso, resultado; int HabRobar; do { Console.Clear(); Console.WriteLine("Robar objetos"); Console.Write("\n\nHabilidad para robar (1-100): "); HabRobar = Int16.Parse(Console.ReadLine()); Console.Write("Peso del objeto a robar: "); peso = Single.Parse(Console.ReadLine()); resultado = PickPocket(HabRobar, peso); if (resultado >= 80) { Console.Clear(); Console.WriteLine("Tu robo fue un xito!"); Console.Write("Deseas intentar tomar otro objeto? (s/n): "); resp = Char.Parse(Console.ReadLine()); } else { Console.Clear(); Console.WriteLine("Tu robo fue un fiasco!"); Console.WriteLine("Un guardia te observ y te ha arrestado "); Console.ReadKey(); } } while (resp == 's'); }

Fuentes:
http://es.wikipedia.org/wiki/Estructura_de_datos http://es.scribd.com/doc/36911073/Memoria-Estatica http://diego-estructuradedatos1.blogspot.mx/2011/04/memoria-estatica-y-dinamica.html http://es.wikipedia.org/wiki/Memoria_din%C3%A1mica

Das könnte Ihnen auch gefallen