Está en la página 1de 27

INSTITUTO TECNOLOGICO MILPA ALTA

ALUMNA: BEATRIZ NAPOLES LOPEZ

PROF.: GERARDO ACEVEDO vega

TEMA: MANUAL

MATERIA: ESTRUCTURA DE DATOS

CARRERA: ING. SISTEMAS COMPUTACIONALES

TEMARIO

Unidad 1 1 Introduccin a las estructuras de datos. 1.1 Tipos de datos abstractos (TDA). 1.2 Modularidad. 1.3 Uso de TDA. 1.4 Manejo de memoria esttica. 1.5 Manejo de memoria dinmica UNIDAD 2 2 Recursividad 2.1 Definicin 2.2 Procedimientos recursivos 2.3 Ejemplos de casos recursivos UNIDAD3 3 Estructuras lineales Listas. Operaciones bsicas con listas. Tipos de listas. Listas simplemente enlazadas. Listas doblemente enlazadas. Listas circulares. Aplicaciones. Pilas. Representacin en memoria esttica y dinmica. Operaciones bsicas con pilas. Aplicaciones. Notacin infija y postfija. Recursividad con ayuda de pilas. Colas. Representacin en memoria esttica y dinmica. Operaciones bsicas con colas. Tipos de colas: Cola simple, Cola circular y Colas dobles.

Aplicaciones: Colas de prioridad. UNIDAD 4 4 Estructuras no lineales 4.1 Arboles. 4.1.1 Concepto de rbol. 4.1.2 Clasificacin de rboles. 4.1.3 Operaciones bsicas sobre rboles binarios. 4.1.4 Aplicaciones. 4.1.5 Arboles balanceados (AVL). 4.2 Grafos. 4.2.1 Terminologa de grafos. 4.2.2 Operaciones bsicas sobre grafos. UNIDAD 5 5 Mtodos de ordenamiento 5.1 Algoritmos de Ordenamiento Internos 5.1.1 Burbuja. 5.1.2 Quicksort. 5.1.3 ShellSort. 5.1.4 Radix 5.2 Algoritmos de ordenamiento Externos 5.2.1 Intercalacin 5.2.2 Mezcla Directa 5.2.3 Mezcla Natural UNIDAD 6 6 Mtodos de bsqueda 6.1 Bsqueda secuencial 6.2 Bsqueda binaria 6.3 Bsqueda por funciones de HASH UNIDAD 7 7 Anlisis de los algoritmos 7.1 Complejidad en el tiempo. 7.2 Complejidad en el espacio. 7.3 Eficiencia de los algoritmos

TIPOS DE DATOS ABSTRACTOS

La implementacin puede hacerse usando las estructuras mas simples, comunes en casi todos los lenguajes de programacin: Escalares arreglos matrices. Sin embargo algunos problemas se pueden plantear en forma mas simple o eficiente en trminos de estructuras informticas mas complejas, como listas pilas colas arboles grafos conjuntos.

El uso de estas estructuras tiene una serie de ventajas : Se ahorra tiempo de programacin ya que no es necesario codificar Estas implementaciones suelen ser eficientes Existen estimaciones bastante uniforme de los tiempos de ejecucin de las diferentes operaciones Un tipo abstracto de dato es la descripcin matemtica de un objeto abstracto definido por las operaciones que actan sobre el mismo.

Biografia: Algoritmos y Estructuras de Datos Mario Storti, Jorge D'Ela, Rodrigo Paz, Lisandro Dalcn, y Martn Pucheta PAG 48

MODULARIDAD

Caractersticas por las cuales un programa de ordenador esta compuesto de partes separadas a las que llamamos mdulos

El diseo estructurado es la tcnica del diseo de algoritmos en que se basa la programacin modular, paradigma de programacin que persigue desarrollar programas modulares

Biografia: Estructura de datos y algoritmos en java Adam drozdec

EJERCICIO: Hacer un programa que permita almacenar en memoria 5 productos para una tienda utilizando las caractersticas propuestas en el pizarrn 1.import java.util.Scanner; class productos { public static void main(String args[]) { String []des=new String [5]; int [] cod=new int [5]; float [] prec=new float [5]; String [] mar=new String [5]; Scanner a=new Scanner(System.in); for(int i=0;i<=4;i++){ System.out.println("producto"+(i+1)); System.out.println("Descripcion:"); des[i]=a.next(); System.out.println("Codigo:"); cod[i]=a.nextInt(); System.out.println("Precio:"); prec[i]=a.nextFloat(); System.out.println("Marca:"); mar[i]=a.next(); } } }

2.import java.util.Scanner; class Productos { public static void main(String arg []) { String Ma1,Ma2,Ma3,Ma4,Ma5; String Mo1,Mo2,Mo3,Mo4,Mo5; int C1,C2,C3,C4,C5; float P1,P2,P3,P4,P5; Scanner t=new Scanner (System.in); System.out.println("Introduce la marca 1"); Ma1=t.next(); System.out.println("modelo"); Mo1=t.next(); System.out.println("codigo");=t.nextInt(); System.out.println("precio"); P1=t.nextFloat(); System.out.println("Introduce la marca 2"); Ma2=t.next(); System.out.println("modelo"); Mo2=t.next(); System.out.println("codigo"); C2=t.nextInt(); System.out.println("precio"); P2=t.nextFloat(); System.out.println("Introduce la marca 3"); Ma3=t.next(); System.out.println("modelo"); Mo3=t.next(); System.out.println("codigo"); C3=t.nextInt(); System.out.println("precio"); P3=t.nextFloat(); System.out.println("Introduce la marca 4"); Ma4=t.next(); System.out.println("modelo"); Mo4=t.next();

System.out.println("codigo"); C4=t.nextInt(); System.out.println("precio"); P4=t.nextFloat(); System.out.println("Introduce la marca 5"); Ma5=t.next(); System.out.println("modelo"); Mo5=t.next(); System.out.println("codigo"); C5=t.nextInt(); System.out.println("precio"); P5=t.nextFloat(); }}

3.import java.util.Scanner; public class Producto1 { String codigo; float precio; String presentacion; String peresedero; String fechacad; String unidmed; int contenido; String descripcion; String marca; int modelo; }

public class Tienda { public static void main(String args[]) { Scanner t=new Scanner(System.in); Producto1 P=new Producto1(); System.out.println("Codigo "); P.codigo=t.next(); System.out.println("Precio "); P.precio=t.nextFloat(); System.out.println("Presentacion "); P.presentacion=t.next(); System.out.println("Pedecedero "); P.peresedero=t.next(); System.out.println("Fecha de caducidad "); P.fechacad=t.next(); System.out.println("Unidad de medida "); P.unidmed=t.next(); System.out.println("Contenido "); P.contenido=t.nextInt(); System.out.println("Descripcion "); P.descripcion=t.next();

System.out.println("Marca "); P.marca=t.next(); System.out.println("Modelo "); P.modelo=t.nextInt(); }}

4.import java.util.Scanner; class tienda { public static void main(String args[]) { producto[] p=new producto[4]; Scanner t=new Scanner(System.in); for (int i=0; i<=3; i++); { p[i]=new producto System.out.println("producto"+(i+1)); p[i].producto=t.next(); System.out.println("descripcion"); p[i].descripcion=t.next(); System.out.println("codigo"); p[i].codigo=t.nextInt(); }}} public class producto { String producto; int codigo; String descripcion; }

Tipo de dato abstracto


import java.util.Scanner; class Tienda { public static void main(String args[]) { String[] des=new String[5]; int [] cod=new int[5]; float[] pre=new float[5]; String[] mar=new String[5]; String[] presen=new String[5]; String[] cont=new String[5]; String[] mod=new String[5]; String[] fech=new String[5]; int[] unid=new int[5]; int[] peres=new int[5]; Scanner t=new Scanner(System.in); for(int i=0; i<=4; i++) { System.out.println("Producto" +(i+1)); System.out.println("Descripcion: "); des[i]=t.next(); System.out.println("codigo: "); cod[i]=t.nextInt(); System.out.println("Presio: "); pre[i]=t.nextFloat(); System.out.println("Marca"); mar[i]=t.next(); System.out.println("Presentacion"); presen[i]=t.next(); System.out.println("peresedero"); peres[i]=t.nextInt(); System.out.println("fecha de caducidad"); fech[i]=t.next(); System.out.println("unidad de medida"); unid[i]=t.nextInt(); System.out.println("contenido");

cont[i]=t.next(); }}}

MODULARIDAD.
Permite dividir un sistema en componentes separados. Al contar con abstracciones de mas alto nivel, la modularidad de un sistema se logra con base en componentes, tambin de mas alto nivel. Esto reduce el nmero final de componentes de un sistema y, a su vez facilita su operacin y mantenimiento. Con la orientacin a objetos la modularidad del sistema se basa en objetos, un nivel ms alto que los datos y funciones tradicionales. El numero final de mdulos u objetos es menor que el numero de datos y funciones. Esto reduce la complejidad de la aplicacin, ya que el programador piensa en menos componentes a la vez, descartando detalles innecesarios.

Bibliografa: Ingenieria de software orientada a objetos con UML. JAVA e Internet. Alfredo Weitzenfeld.

Editorial Thomson. Pagina 25.

MEMORIA ESTATICA.
El mtodo ms simple para implementar este tipo es ir asignando la memoria de forma continua. Ser suficiente para ello disponer de un contador de posiciones que sea incrementado con cada asignacin. Esto ser posible siempre que se conozcan los tamaos de los objetos en tiempo de compilacin y siempre que no haya rutinas reentrantes. El tamao de cada objeto y su direccin (valor del contador cuando se encuentra en su direccin) sern datos de la tabla de smbolos. Si el compilador no genera direcciones absolutas, sino relativas a un segmento, ser el montador el que s e encargara de asignar direcciones fsicas a las direcciones relativas. Para ello le bastara sumar a la direccin relativa la direccin fsica que vaya asignando a cada segmento.

MEMORIA DINAMICA.
Podemos definir la pila con la que vamos a trabajar como una lista lineal enla que nicamente se puede operar con su cabeza, aplicndole las operaciones push y pop. La operacin push elemento introduce un nuevo elemento en la cima de la pila, pasando a ser ese elemento a ser el primero. La operacin pop saca el elemento que se encuentra en la cima de la pila. No existe estructura de bloques ni anidamiento de rutinas reentrantes, que es por lo que denominamos a esta asignacin dinmica como simple. Se permite la recursividad o reentrancia en las rutinas a eleccin del programador. Por lo tanto, a una rutina declarada como no reentrante el compilador asignara estticamente sus datos, mientras que si se declara reentrante, la asignacin de sus variables locales ser dinmica en la pila. Cada rutina reentrante tiene lo que denominamosregistro de activacin, el cual se incluye en la pila cada vez que es invocada dicha rutina y en el que se guardan los valores de sus objetos locales.

Bibliografa: Compiladores e interpretes un enfoque programtico 2da edicin. Gonzales Snchez Dueas y Juan A. Valverde Andreu. Editorial Daz Santos S.A. Madrid. Pagina 143 y 144.

Juan se dedica a repara celulares, el desea crear un programa para registrar los celulares que llegaran a reparacin. Crear un tipo de dato que permita almacenar el registro de dichos celulares. String Int String String Int String Marca; Modelo; Dao; Cliente; Costo; Fechenysa;

Hacer una abstraccin de datos de un negocio cualquiera. Tienda de discos String String char String float String String Genero; Tipo; Artista; Serie ; Precio; Descripcion ; Nombre del disco;

EJERCICIO: Realizar un programa que te da como resultado el factorial de un numero 1.import java.util.Scanner; class factorial { public static void main(String args[]) { int a; Scanner t=new Scanner(System.in); System.out.println("introduce el numero"); int n=t.nextInt();

accion A= new accion(); a=A.factorial(n); System.out.println(El factorial de +n+ es +a); }}

EJERCICIO: Realizar un programa que te da como resultado una permutacion import java.util.Scanner; class factorial{ public static void main(String args[]){ int a,s; Scanner t=new Scanner(System.in); System.out.println("Permutacion n1!/(n1-r)!"); System.out.println("introduce el valor n1"); int n=t.nextInt(); System.out.println("introduce el valor r"); int r=t.nextInt(); accion A= new accion(); a=A.factorial(n); accion2 A2= new accion2(); s=A2.factorial2(n,r); double R=a/s; System.out.println("La permutacion es "+R); }} class accion { public static int factorial(int n) { for(int i=n-1;i>=2;i--) {

n=n*i; } return n; }} class accion2{ public static int factorial2(int m,int r){ m=m-r; for(int i=m-1;i>=2;i--) { m=m*i; } return m; }}

EJERCICIO: Realizar un programa que te da como resultado una permutacion import java.util.Scanner; class factorial { public static void main(String args[]) { int a; Scanner t=new Scanner(System.in); System.out.println("Permutacion n1!/(n1-r)!"); System.out.println("introduce el valor n1"); int n=t.nextInt(); System.out.println("introduce el valor r"); int r=t.nextInt(); accion A= new accion(); a=A.permuta(n,r); System.out.println("La permutacion es "+a); } } class accion { public int permuta (int n,int r) {

int b=n-r; for(int i=n-1;i>=2;i--) { n=n*i; } for(int i=b-1;i>=2;i--) { b=b*i; } n=n/b; return n; } } En base a la tarea realizar un metodo que permita leer los atrivutos de una clase en un objeto y retorne el mismo Ejemplo: import java.util.Scanner; public class Productoreturn { public static void main(String arg[]) { Producto P=new Producto(); Producto aux=P.ingresa(); P.imprime(aux); }} class Producto { String descripcion; String marca; String modelo; int codigo; float precio; String presentacion; String unidmed; int contenido; String peresedero;

String fechacad; public void imprime (Producto aux) { System.out.println("Descripcion "+aux.descripcion); System.out.println("Marca "+aux.marca); System.out.println("Modelo "+aux.modelo); System.out.println("Codigo "+aux.codigo); System.out.println("Precio "+aux.precio); System.out.println("Presentacion "+aux.presentacion); System.out.println("Unidad de medida "+aux.unidmed); System.out.println("Contenido "+aux.contenido); System.out.println("Peresedero "+aux.peresedero);.out.println("Fecha de caducidad "+aux.fechacad); } public Producto ingresa() { Producto aux=new Producto(); Scanner t=new Scanner(System.in); System.out.println("Descripcion"); aux.descripcion=t.next(); System.out.println("Marca"); aux.marca=t.next(); System.out.println("Modelo"); aux.modelo=t.next(); System.out.println("Codigo"); aux.codigo=t.nextInt(); System.out.println("Precio"); aux.precio=t.nextFloat(); System.out.println("Presentacion"); aux.presentacion=t.next(); System.out.println("Unidad de medida"); aux.unidmed=t.next();.out.println("Contenido"); aux.contenido=t.nextInt(); System.out.println("Peresedero"); aux.peresedero=t.next(); System.out.println("Fecha de caducidad"); aux.fechacad=t.next(); return aux; }}

Tarea: import java.util.Scanner; public class discos { public static void main(String arg[]) { Producto P=new Producto(); Producto aux=P.ingresa(); P.imprime(aux); }} class Producto { String Genero; String Tipo; char Artista; String Serie ; float Precio; String Descripcion ; String Nombre del disco; public void imprime (Producto aux) { System.out.println("Genero "+aux.gen); System.out.println("Tipo "+aux.tip); System.out.println("Artista "+aux.art); System.out.println("Serie "+aux.ser); System.out.println("Precio "+aux.pre); System.out.println("Descripcion "+aux.des); System.out.println("Nombre del disco "+aux.nomdis); } public Producto ingresa() { Producto aux=new Producto(); Scanner t=new Scanner(System.in); System.out.println("Genero"); aux.gen=t.next(); System.out.println("Tipo"); aux.tip=t.nextFloat();

System.out.println("Artista"); aux.art=t.next(); System.out.println("Serie "); aux.ser=t.nextInt(); System.out.println("Precio"); aux.pre=t.next(); System.out.println("Descripcion"); aux.des=t.next(); System.out.println("Nombre del disco"); aux.nomdis=t.next(); return aux; }}

EJERCICIO: Realizar un programa que permita leer "n" datos de tipo entero en un arreglo. Obtener el nmero mayor de los elementos utilice 2 mtodos(el de leer y el de buscar) import java.util.Scanner; class Nummay { public static void main(String arg[]) { Scanner t=new Scanner(System.in); System.out.println("Cuantos numeros deseas ingresar"); int n=t.nextInt(); proceso P=new proceso(); int []arreglo=P.leer(n); int may=P.buscar(arreglo); System.out.println("El numero mayor es "+may); }}

class proceso { public int[] leer(int n) { int[] arreglo=new int[n]; Scanner t=new Scanner(System.in); for(int i=0;i<n;i++) { System.out.println("Elemento"+(i+1)); arreglo[i]=t.nextInt();} return arreglo;} public int buscar(int arreglo[]){ int may=arreglo[0]; for(int i=1;i<arreglo.length;i++){ if(arreglo[i]>may){ may=arreglo[i]; }} return may; }}

EJERCICIO: Realizar un programa que lea un numero de tipo entero y lo convierta a binario, octal y hexadecimal. Utiliza mtodos y parmetros. Binario import java.util.Scanner; class binario { public static void main(String args[]) { int a; Scanner t=new Scanner(System.in); System.out.println("introduce el numero"); int x=t.nextInt(); accion A= new accion(); a=A.binario(x); System.out.println( a); }} class accion { public int binario(int x) { String bin=""; while(x>0) { bin =(x%2)+ bin; x=x/2; } return x; }}

Octal import java.util.Scanner; class octal { public static void main(String args[]) { int a; Scanner t=new Scanner(System.in); System.out.println("introduce el numero"); int x=t.nextInt(); accion A= new accion(); a=A.octal(x); System.out.println( a); }} class accion { public int octal(int x) { String oct=""; while(x>0) { oct =(x%8)+ oct; x=x/8; } return x; }}

RECURSIVIDAD.
Una funcin recursiva es una funcin que se llama a si misma de manera directa o indirecta a travs de una funcin. La recursividad es un tema complejo que se imparte en cursos de computacin largos y avanzados. Los mtodos para solucionar problemas por medio de la recursividad tienen algunos elementos en comn. Se llama a una funcin recursiva para resolver un problema. La funcin en si solo sabe como resolver un problema para el caso mas sencillo, o caso base. Si se invoca a la funcin desde el caso base, esta simplemente devuelve el resultado. Si se llama a la funcin desde el problema mas complejo la funcin divide el problema en dos partes conceptuales. Una parte que la funcin sabe como resolver y una parte que la funcin no sabe como resolver. Para hacer posible la recursividad, la segunda parte debe plantear el problema original, pero con una versin ligeramente mas sencilla o mas pequea que el problema original. Debido a que este problema se parece al problema original, la funcin lanza (llama) a una nueva copia de si misma para que trabaje con el problema mas pequeo, a esto se le denomina llamada recursiva o tambin paso recursivo. El paso recursivo tambin incluye la palabra reservada return, debido a que su resultado se combinara con la parte del problema que la funcin sabe como resolver para formar un resultado que se pase a la llamada original a la funcin, posiblemente main. El paso recursivo se ejecuta mientras la llamada a la funcin original permanezca abierta, es decir, mientras no termine su ejecucin. El paso recursivo puede generar muchas ms de estas llamadas recursivas mientras la funcin contina dividiendo cada problema en dos partes conceptuales. Para que la recursividad termine, cada vez que la funcin se invoca a si misma con una versin del problema ligeramente mas sencilla que el problema original, esta secuencia de problemas mas pequeos debe converger en algn momento con el caso base. En ese punto, la funcin reconoce el caso base, devuelve el resultado a la copia previa de la funcin, y se presenta una secuencia de resultados que se mueve hacia arriba, hasta que la funcin original devuelve el resultado final a main.
Bibliografa: Como programar en C/C++ y java, cuarta edicin. Deitel, Harvey M. y Deitel, Paul J. Pearson educacin, Mxico, 2004, 1152 paginas. Capitulo 5, pagina 151.

Fibonacci:
Fib(0)=0 Fib(1)=1 Fib(n+2)=fib(n+1)+fib(n) si n>=0 Partimos de la especificacin Var n, x;Ent; {P:n=N^n>=0} Fibonacci {Q:n=N^x=fib(n)} Los nmeros fibonacci no se pueden especificar utilizando el lenguaje de asertos. Esto ocurre con muchas funciones definidas de forma recursiva. Entendemos en este caso que la especificacin se completa con la definicin recursiva de la funcin, escrita arriba y que especifica el comportamiento de dicha funcin. La idea del algoritmo es ir obteniendo los nmeros de fibonacci para valores sucesivos hasta llegar al valor de n, uno por cada pasada por el bucle.

Bibliografa: Estructura de datos un enfoque moderno, primera edicin septiembre del 2011. Mario Rodrguez Artalejo, Pedro Antonio Gonzlez Calero y Marco Antonio Gmez Mart. Editorial Complutense. Pgina 104.

También podría gustarte