Estructuras de datos en java / Joyanes Aguilar, Luis.
Tipo de material:
TextoEspaña : McGraw Hill, 2008Descripción: 531 páginas. Ilustraciones, gráficosISBN: 9788448156312Tema(s): 1. LENGUAJES DE PROGRAMACIÓN (JAVA) | 2. PROGRAMACIÓN ORIENTADA A OBJETOS (POO) | 3. ESTRUCTURAS DE DATOS (COMPUTACIÓN) | 4. ALGORITMOS (ANÁLISIS Y DISEÑO) | 5. COMPLEJIDAD COMPUTACIONALClasificación LoC:005.133 J849e| Tipo de ítem | Ubicación actual | Colección | Signatura | Copia número | Estado | Fecha de vencimiento | Código de barras |
|---|---|---|---|---|---|---|---|
Libro - Material General
|
Biblioteca Sede Sur Ingenierias | Colección General | 005.133 J849e (Navegar estantería) | Ej. 1 | Disponible | 6555 |
Compra realizada en Marzo Libreria El Aprendiz
Incluye bibliografía e índice.
Prólogo -- Capítulo 1. Algoritmos y estructuras de datos -- Introducción -- 1.1. Tipos de datos -- 1.1.1. Tipos primitivos de datos -- 1.1.2. Tipos de datos compuestos y agregados -- 1.2. La necesidad de las estructuras de datos -- 1.2.1. Etapas en la selección de una estructura de datos -- 1.3. Algoritmos y programas -- 1.3.1. Propiedades de los algoritmos -- 1.3.2. Programas -- 1.4. Eficiencia y exactitud -- 1.4.1. Eficiencia de un algoritmo -- 1.4.2. Formato general de la eficiencia -- 1.4.3. Análisis de rendimiento -- 1.5. Notación O-grande -- 1.5.1. Descripción de tiempos de ejecución con la notación O -- 1.5.2. Determinar la notación O -- 1.5.3. Propiedades de la notación O-grande -- 1.6. Complejidad de las sentencias básicas de Java -- RESUMEN -- EJERCICIOS -- Capítulo 2. Tipos de datos: clases y objetos -- Introducción -- 2.1. Abstracción en lenguajes de programación -- 2.1.1. Abstracciones de control -- 2.1.2. Abstracciones de datos -- 2.2. Tipos abstractos de datos -- 2.2.1. Ventajas de los tipos abstractos de datos -- 2.2.2. Implementación de los TAD -- 2.3. Especificación de los TAD -- 2.3.1. Especificación informal de un TAD -- 2.3.2. Especificación formal de un TAD -- 2.4. Clases y objetos -- 2.4.1. ¿Qué son objetos? -- 2.4.2. ¿Qué son clases? -- 2.5. Declaración de una clase -- 2.5.1. Objetos -- 2.5.2. Visibilidad de los miembros de la clase -- 2.5.3. Métodos de una clase -- 2.5.4. Implementación de las clases -- 2.5.5. Clases públicas -- 2.6. Paquetes -- 2.6.1. Sentencia package -- 2.6.2. Sentencia import -- 2.7. Constructores -- 2.7.1. Constructor por defecto -- 2.7.2. Constructores sobrecargados -- 2.8. Recolección de basura (objetos) -- 2.8.1. Método finalize() -- 2.9. Objeto que envía el mensaje: this -- 2.10. Miembros static de una clase -- 2.10.1. Variables static -- 2.10.2. Métodos static -- 2.11. Clase Object -- 2.11.1. Operador instanceof -- 2.12. Tipos abstractos de datos en Java -- 2.12.1. Implementación del TAD Conjunto -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 3. Arrays (arreglos) y cadenas -- Introducción -- 3.1. Arrays (arreglos) -- 3.1.1. Declaración de un array -- 3.1.2. Creación de un array -- 3.1.3. Subíndices de un array -- 3.1.4. Tamaño de los arrays: atributo length -- 3.1.5. Verificación del índice de un array -- 3.1.6. Inicialización de un array -- 3.1.7. Copia de arrays -- 3.2. Arrays multidimensionales -- 3.2.1. Inicialización de arrays multidimensionales -- 3.2.2. Acceso a los elementos de arrays bidimensionales -- 3.2.3. Arrays de más de dos dimensiones -- 3.3. Utilización de arrays como parámetros -- 3.3.1. Precauciones -- 3.4. Cadenas. Clase String -- 3.4.1. Declaración de variables cadena -- 3.4.2. Inicialización de variables cadena -- 3.4.3. Inicialización con un constructor de String -- 3.4.4. Asignación de cadenas -- 3.4.5. Métodos de String -- 3.4.6. Operador + con cadenas -- 3.5. Clase Vector -- 3.5.1. Creación de un Vector -- 3.5.2. Insertar elementos -- 3.5.3. Acceso a un elemento -- 3.5.4. Eliminar un elemento -- 3.5.5. Búsqueda -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 4. Clases derivadas y polimorfismo -- Introducción -- 4.1. Clases derivadas -- 4.1.1. Declaración de una clase derivada -- 4.1.2. Diseño de clases derivadas -- 4.1.3. Sobrecarga de métodos en la clase derivada -- 4.2. Herencia pública -- 4.3. Constructores en herencia -- 4.3.1. Sintaxis -- 4.3.2. Referencia a la clase base: super -- 4.4. Métodos y clases no derivables: atributo final -- 4.5. Conversiones entre objetos de clase derivada y clase base -- 4.6. Métodos abstractos -- 4.6.1. Clases abstractas -- 4.7. Polimorfismo -- 4.7.1. Uso del polimorfismo -- 4.7.2. Ventajas del polimorfismo -- 4.8. Interfaces -- 4.8.1. Implementación de una interfaz -- 4.8.2. Jerarquía de interfaz -- 4.8.3. Herencia de clases e implementación de interfaz -- 4.8.4. Variables interfaz -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 5. Algoritmos recursivos -- Introducción -- 5.1. La naturaleza de la recursividad -- 5.2. Métodos recursivos -- 5.2.1. Recursividad indirecta: métodos mutuamente recursivos -- 5.2.2. Condición de terminación de la recursión -- 5.3. Recursión versus iteración -- 5.3.1. Directrices en la toma de decisión iteración/recursión -- 5.3.2. Recursión infinita -- 5.4. Algoritmos divide y vencerás -- 5.4.1. Torres de Hanoi -- 5.4.2. Búsqueda binaria -- 5.5. Backtracking (algoritmos de vuelta atrás) -- 5.5.1. Problema del salto del caballo -- 5.5.2. Problema de las ocho reinas -- 5.6. Selección óptima -- 5.6.1. Problema del viajante -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 6. Algoritmos de ordenación y búsqueda -- Introducción -- 6.1. Ordenación -- 6.2. Algoritmos de ordenación básicos -- 6.3. Ordenación por intercambio -- 6.3.1. Codificación del algoritmo de ordenación por intercambio -- 6.3.2. Complejidad del algoritmo de ordenación por intercambio -- 6.4. Ordenación por selección -- 6.4.1. Codificación del algoritmo de selección -- 6.4.2. Complejidad del algoritmo de selección -- 6.5. Ordenación por inserción -- 6.5.1. Algoritmo de ordenación por inserción -- 6.5.2. Codificación del algoritmo de ordenación por inserción -- 6.5.3. Complejidad del algoritmo de inserción -- 6.6. Ordenación Shell -- 6.6.1. Algoritmo de ordenación Shell -- 6.6.2. Codificación del algoritmo de ordenación Shell -- 6.6.3. Análisis del algoritmo de ordenación Shell -- 6.7. Ordenación rápida (Quicksort) -- 6.7.1. Algoritmo Quicksort -- 6.7.2. Codificación del algoritmo Quicksort -- 6.7.3. Análisis del algoritmo Quicksort -- 6.8. Ordenación de objetos -- 6.9. Búsqueda en listas: búsqueda secuencial y binaria -- 6.9.1. Búsqueda secuencial -- 6.9.2. Búsqueda binaria -- 6.9.3. Algoritmo y codificación de la búsqueda binaria -- 6.9.4. Análisis de los algoritmos de búsqueda -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 7. Algoritmos de ordenación de archivos -- Introducción -- 7.1. Flujos y archivos -- 7.2. Clase File -- 7.3. Flujos y jerarquía de clases -- 7.3.1. Archivos de bajo nivel: FileInputStream y FileOutputStream -- 7.4. Ordenación de un archivo: métodos de ordenación externa -- 7.5. Mezcla directa -- 7.5.1. Codificación del algoritmo de mezcla directa -- 7.6. Fusión natural -- 7.6.1. Algoritmo de la fusión natural -- 7.7. Mezcla equilibrada múltiple -- 7.7.1. Algoritmo de la mezcla equilibrada múltiple -- 7.7.2. Declaración de archivos para la mezcla equilibrada múltiple -- 7.7.3. Cambio de finalidad de un archivo: entrada/salida -- 7.7.4. Control del número de tramos -- 7.7.5. Codificación del algoritmo de mezcla equilibrada múltiple -- 7.8. Método polifásico de ordenación externa -- 7.8.1. Mezcla polifásica con m3 archivos -- 7.8.2. Distribución inicial de tramos -- 7.8.3. Algoritmo de la mezcla -- 7.8.4. Mezcla polifásica versus mezcla múltiple -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 8. Listas enlazadas -- Introducción -- 8.1. Fundamentos teóricos de listas enlazadas -- 8.2. Clasificación de listas enlazadas -- 8.3. Tipo abstracto de datos (TAD) Lista -- 8.3.1. Especificación formal del TAD Lista -- 8.4. Operaciones de listas enlazadas -- 8.4.1. Declaración de un nodo -- 8.4.2. Acceso a la lista: cabecera y cola -- 8.4.3. Construcción de una lista -- 8.5. Inserción de un elemento en una lista -- 8.5.1. Insertar un nuevo elemento en la cabeza de la lista -- 8.5.2. Inserción al final de la lista -- 8.5.3. Insertar entre dos nodos de la lista -- 8.6. Búsqueda en listas enlazadas -- 8.7. Eliminación de un nodo de una lista -- 8.8. Lista ordenada -- 8.8.1. Clase ListaOrdenada -- 8.9. Lista doblemente enlazada -- 8.9.1. Nodo de una lista doblemente enlazada -- 8.9.2. Insertar un elemento en una lista doblemente enlazada -- 8.9.3. Eliminar un elemento de una lista doblemente enlazada -- 8.10. Listas circulares -- 8.10.1. Insertar un elemento en una lista circular -- 8.10.2. Eliminar un elemento en una lista circular -- 8.10.3. Recorrer una lista circular -- 8.11. Listas enlazadas genéricas -- 8.11.1. Declaración de la clase Lista genérica -- 8.11.2. Iterador de lista -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 9. Pilas -- Introducción -- 9.1. Concepto de pila -- 9.1.1. Especificaciones de una pila -- 9.2. Tipo de dato Pila implementado con arrays -- 9.2.1. Clase PilaLineal -- 9.2.2. Implementación de las operaciones sobre pilas -- 9.2.3. Operaciones de verificación del estado de la pila -- 9.3. Pila dinámica implementada con un vector -- 9.4. El tipo Pila implementado como una lista enlazada -- 9.4.1. Clase Pila y NodoPila -- 9.4.2. Implementación de las operaciones del TAD Pila con listas enlazadas -- 9.5. Evaluación de expresiones aritméticas con pilas -- 9.5.1. Notación prefija y notación postfija de una expresión aritmética -- 9.5.2. Evaluación de una expresión aritmética -- 9.5.3. Transformación de una expresión infija a postfija -- 9.5.4. Evaluación de la expresión en notación postfija -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 10. Colas -- Introducción -- 10.1. Concepto de cola -- 10.1.1. Especificaciones del tipo abstracto de datos Cola -- 10.2. Colas implementadas con arrays -- 10.2.1. Declaración de la clase Cola -- 10.3. Cola con un array circular -- 10.3.1. Clase Cola con array circular -- 10.4. Cola con una lista enlazada -- 10.4.1. Declaración de Nodo y Cola -- 10.5. Bícolas (colas de doble entrada) -- 10.5.1. Bicola con listas enlazadas -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 11. Colas de prioridades y montículos -- Introducción -- 11.1. Colas de prioridades -- 11.1.1. Declaración del TAD cola de prioridad -- 11.1.2. Implementación -- 11.2. Tabla de prioridades -- 11.2.1. Implementación -- 11.2.2. Insertar -- 11.2.3. Elemento de máxima prioridad -- 11.2.4. Cola de prioridad vacía -- 11.3. Vector de prioridades -- 11.3.1. Insertar -- 11.3.2. Elemento de máxima prioridad -- 11.3.3. Cola de prioridad vacía -- 11.4. Montículos -- 11.4.1. Definición de montículo -- 11.4.2. Representación de un montículo -- 11.4.3. Propiedad de ordenación: condición de montículo -- 11.4.4. Operaciones en un montículo -- 11.4.5. Operación insertar -- 11.4.6. Operación buscar mínimo -- 11.4.7. Eliminar mínimo -- 11.5. Ordenación por montículos (heapsort) -- 11.5.1. Algoritmo -- 11.5.2. Codificación -- 11.5.3. Análisis del algoritmo de ordenación por montículos -- 11.6. Cola de prioridades en un montículo -- 11.6.1. Ejemplo de cola de prioridades -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 12. Tablas de dispersión, funciones hash -- Introducción -- 12.1. Tablas de dispersión -- 12.1.1. Definición de una tabla de dispersión -- 12.1.2. Operaciones de tablas de dispersión -- 12.2. Funciones de dispersión -- 12.2.1. Aritmética modular -- 12.2.2. Plegamiento -- 12.2.3. Mitad del cuadrado -- 12.2.4. Método de la multiplicación -- 12.3. Colisiones y resolución de colisiones -- 12.4. Exploración de direcciones -- 12.4.1. Exploración lineal -- 12.4.2. Exploración cuadrática -- 12.4.3. Doble dirección dispersa -- 12.5. Realización de una tabla dispersa -- 12.5.1. Declaración de la clase Tabla Dispersa -- 12.5.2. Inicialización de la tabla dispersa -- 12.5.3. Posición de un elemento -- 12.5.4. Insertar un elemento en la tabla -- 12.5.5. Búsqueda de un elemento -- 12.5.6. Dar de baja un elemento -- 12.6. Direccionamiento enlazado -- 12.6.1. Operaciones de la tabla dispersa enlazada -- 12.6.2. Análisis del direccionamiento enlazado -- 12.7. Realización de una tabla dispersa encadenada -- 12.7.1. Dar de alta un elemento -- 12.7.2. Eliminar un elemento -- 12.7.3. Buscar un elemento -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 13. Árboles. Árboles binarios y árboles ordenados -- Introducción -- 13.1. Árboles generales y terminología -- 13.1.1. Terminología -- 13.1.2. Representación gráfica de un árbol -- 13.2. Árboles binarios -- 13.2.1. Equilibrio -- 13.2.2. Árboles binarios completos -- 13.2.3. TAD Árbol binario -- 13.2.4. Operaciones en árboles binarios -- 13.3. Estructura de un árbol binario -- 13.3.1. Representación de un nodo -- 13.3.2. Creación de un árbol binario -- 13.4. Árbol de expresión -- 13.4.1. Reglas para la construcción de árboles de expresiones -- 13.5. Recorrido de un árbol -- 13.5.1. Recorrido preorden -- 13.5.2. Recorrido en orden -- 13.5.3. Recorrido postorden -- 13.5.4. Implementación -- 13.6. Árbol binario de búsqueda -- 13.6.1. Creación de un árbol binario de búsqueda -- 13.6.2. Nodo de un árbol binario de búsqueda -- 13.7. Operaciones en árboles binarios de búsqueda -- 13.7.1. Búsqueda -- 13.7.2. Insertar un nodo -- 13.7.3. Eliminar un nodo -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 14. Árboles de búsqueda equilibrados -- Introducción -- 14.1. Eficiencia de la búsqueda en un árbol ordenado -- 14.2. Árbol binario equilibrado: árboles AVL -- 14.2.1. Altura de un árbol equilibrado: árbol AVL -- 14.3. Inserción en árboles de búsqueda equilibrados: rotaciones -- 14.3.1. Proceso de inserción de un nuevo nodo -- 14.3.2. Rotación simple -- 14.3.3. Movimiento de enlaces en la rotación simple -- 14.3.4. Rotación doble -- 14.3.5. Movimiento de enlaces en la rotación doble -- 14.4. Implementación de la inserción con balanceo y rotaciones -- 14.5. Borrado de un nodo en un árbol equilibrado -- 14.5.1. Algoritmo de borrado -- 14.5.2. Implementación de la operación de borrado -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 15. Grafos, representación y operaciones -- Introducción -- 15.1. Conceptos y definiciones -- 15.1.1. Grado de entrada, grado de salida de un nodo -- 15.1.2. Camino -- 15.1.3. Tipo abstracto de datos Grafo -- 15.2. Representación de los grafos -- 15.2.1. Matriz de adyacencia -- 15.2.2. Matriz de adyacencia: clase GrafoMatriz -- 15.3. Listas de adyacencia -- 15.3.1. Clase GrafoAdcia -- 15.3.2. Realización de las operaciones con listas de adyacencia -- 15.4. Recorrido de un grafo -- 15.4.1. Recorrido en anchura -- 15.4.2. Recorrido en profundidad -- 15.4.3. Implementación: clase RecorreGrafo -- 15.5. Conexiones en un grafo -- 15.5.1. Componentes conexas de un grafo -- 15.5.2. Componentes fuertemente conexas de un grafo -- 15.6. Matriz de caminos: cierre transitivo -- 15.6.1. Matriz de caminos y cierre transitivo -- 15.7. Puntos de articulación de un grafo -- 15.7.1. Búsqueda de los puntos de articulación -- 15.7.2. Implementación -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 16. Grafos, algoritmos fundamentales -- Introducción -- 16.1. Ordenación topológica -- 16.1.1. Algoritmo de una ordenación topológica -- 16.1.2. Implementación del algoritmo de ordenación topológica -- 16.2. Matriz de caminos: algoritmo de Warshall -- 16.2.1. Implementación del algoritmo de Warshall -- 16.3. Caminos más cortos con un solo origen: algoritmo de Dijkstra -- 16.3.1. Algoritmo de Dijkstra -- 16.3.2. Codificación del algoritmo de Dijkstra -- 16.4. Todos los caminos mínimos: algoritmo de Floyd -- 16.4.1. Codificación del algoritmo de Floyd -- 16.5. Árbol de expansión de coste mínimo -- 16.5.1. Algoritmo de Prim -- 16.5.2. Codificación del algoritmo de Prim -- 16.5.3. Algoritmo de Kruskal -- RESUMEN -- EJERCICIOS -- PROBLEMAS -- Capítulo 17. Colecciones -- Introducción -- 17.1. Colecciones en Java -- 17.1.1. Tipos de colecciones -- 17.2. Clases de utilidades: Arrays y Collections -- 17.2.1. Clase Arrays -- 17.2.2. Clase Collections -- 17.3. Comparación de objetos: Comparable y Comparator -- 17.3.1. Comparable -- 17.3.2. Comparator -- 17.4. Vector y Stack -- 17.4.1. Vector -- 17.4.2. Stack -- 17.5. Iteradores de una colección -- 17.5.1. Enumeration -- 17.5.2. Iterator -- 17.5.3. ListIterator -- 17.6. Interfaz Collection -- 17.7. Listas -- 17.7.1. ArrayList -- 17.7.2. LinkedList -- 17.8. Conjuntos -- 17.8.1. AbstractSet -- 17.8.2. HashSet -- 17.8.3. TreeSet -- 17.9. Mapas y diccionarios -- 17.9.1. Dictionary -- 17.9.2. Hashtable -- 17.9.3. Map -- 17.9.4. HashMap -- 17.9.5. TreeMap -- 17.10. Colecciones parametrizadas -- 17.10.1. Declaración de un tipo parametrizado -- RESUMEN -- EJERCICIOS -- PROBLEMAS
Estructuras de Datos en Java desarrolla los conceptos fundamentales del análisis y diseño de algoritmos, así como los relativos a los principios de abstracción y estructuras de datos. El texto incluye temas tan importantes en el campo de la algoritmia, la programación y la ingeniería de software, tales como complejidad y eficiencia de algoritmos, abstracción, recursividad, representación de estructuras de datos básicas como arrays o “arreglos” (vectores, listas y tablas), archivos y estructuras dinámicas como pilas, colas, listas, árboles y grafos. Los autores estudian de un modo riguroso y eminentemente práctico, aprovechando su larga experiencia docente, las técnicas fundamentales de algoritmos, análisis de algoritmos y estructuras de datos con un método de aprendizaje gradual que facilita la adquisición de conocimientos por parte del lector, tanto teóricos como prácticos. Características fundamentales: uso de Java como lenguaje en el análisis y diseño de algoritmos y en la implementación de sus correspondientes programas (se emplea J2SE v 5.0, conocida como Java 5.0, y es utilizable también con Java SE 6); cobertura amplia de estructuras de datos (arrays/arreglos, cadenas, pilas, colas, colas de prioridad, tablas hash y listas enlazadas); descripción de clases, clases derivadas y polimorfismo como propiedades fundamentales de la programación orientada a objetos; análisis básico y avanzado de algoritmos y estudio de su eficiencia de forma rigurosa; capítulos específicos sobre diseño de algoritmos recursivos, ordenación y búsqueda, y ordenación de archivos; análisis y diseño de estructuras de datos avanzadas como árboles y sus variantes más sofisticadas (árboles binarios, árboles binarios de búsqueda y árboles equilibrados); estudio de la teoría de grafos, sus operaciones y aplicaciones en dos capítulos; revisión de algoritmos avanzados y complejos como backtracking, problema de las ocho reinas y algoritmos voraces; un capítulo dedicado a diccionarios y colecciones, así como a la programación genérica (plantillas, “templates” en C++) introducida en Java 5. Todos los capítulos incluyen numerosos ejemplos y ejercicios resueltos, además de una colección de ejercicios y problemas propuestos al lector y/o alumno.
Libro - Material General
No hay comentarios en este titulo.