Beruflich Dokumente
Kultur Dokumente
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).
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); }
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
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); }
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