Estructuras en C++
description
Transcript of Estructuras en C++
TRABAJO EXTRA CLASE DE
PROGRAMACIÓNII TRIMESTRE
Kimberly Mora Chaves 11-2
Estructuras de Datos 1
S
Estructuras de Datos 2
A
S
IntroducciónIntroducciónIntroducciónIntroducciónEn este trabajo se presentaran varios conceptos relacionados con las estructuras de datos en C++ con el propósito de ampliar los conocimientos, hacia éstos; poner a prueba nuestra creatividad, imaginación entre otras.
Estructuras de Datos 3
Se realiza con motivo de ser clasificado como trabajo extra clase.
Como objetivo del trabajo tenemos: desarrollar la investigación y la descripción de cada uno de los temas, estableciendo la fundamentación teórica de dichos conceptos de manera interactiva e interesante.
SA
Estructuras de Datos 4
SA
ÍndiceÍndiceÍndiceÍndicePunteros o apuntadores 6Listas enlazadas simples 8Colas 10Pilas 12Listas doblemente enlazadas 14Estructuras circulares 16Recursividad 18Recursividad versus iteración 21Árboles binarios 23Grafos 30Archivos secuenciales 32Archivos directos 34Estructura de registro/registro de datos 36Modo de operación de los archivos 38Ejemplos de archivos 40Conclusión 42Bibliografía 44
Estructuras de Datos 5
S
A
Estructuras de Datos 6
SA
Punteros o apuntadoresPunteros o apuntadoresPunteros o apuntadoresPunteros o apuntadores
Variable que direcciona o apunta a un dato que esté almacenado en un lugar de la memoria del computador.
Estructuras de Datos 7
ConceptoConcepto
Caracter íst iCaracter íst icascas Dicha variable no guarda directamente el dato, sino más bien lo que almacena es una
dirección de la memoria del computador done está almacenado dicho dato. Permiten simular llamadas por referencia dentro de una función o procedimiento. Permiten crear y manipular estructuras de datos de manera dinámica. Se inicializa con la palabra NULL.
EjemplosEj emplos
void main(){ double v1=2.5, v2=3.5, v3; double *ptrv1, *ptrv2; ptrv1=&v1; *ptrv1=2*v1; ptrv2=&v2; v3=3*(*ptrv2-*ptrv1); cout<<v3; getch();}
int dato;Int *punterodato;*punterodato=NULL;
10
SA
Estructuras de Datos 8
SA
Listas enlazadas simplesListas enlazadas simplesListas enlazadas simplesListas enlazadas simples
Estructuras de Datos 9
Estructuras dinámicas que están compuestas por un conjunto de estructuras llamados nodos, que están enlazados uno con el otro por medio de un campo de tipo puntero.
ConceptoConcepto
Caracter í st iCaracter í st icascas Estructura lineal.
Cada nodo tendrá solamente un apuntador. El puntero siguiente del último elemento debe apuntar hacia NULL (el fin de la lista). Para acceder a un elemento, la lista es recorrida comenzando por el inicio, el
puntero siguiente permite el desplazamiento hacia el próximo elemento. El desplazamiento se hace en una sola dirección, del primer al último elemento, o del
último al primero. Pero solo una.
Ej emplosEj emplosstruct lista{ int dato; struct lista *siguiente;};
struct lista{ float nota1,nota2,nota; double promedio; struct lista *siguiente;};
SA
Estructuras de Datos 10
SA
Colas Colas Colas Colas
Estructuras de Datos 11
Es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro.
ConceptoConcepto
Caracter íst iCaracter íst icascas Estructura FIFO (del inglés First In First Out), debido a que el primer elemento en
entrar será también el primero en salir. Se utilizan en sistemas informáticos, transportes y operaciones de investigación.
Ej emplosEj emplos
SA
Estructuras de Datos 12
SA
Pilas Pilas Pilas Pilas
Estructuras de Datos 13
Una pila es un tipo especial de lista abierta en la que sólo se pueden insertar y eliminar nodos en uno de los extremos de la lista. Estas operaciones se conocen como "push" y "pop", respectivamente "empujar" y "tirar".
ConceptoConcepto
Caracter íst iCaracter íst icascas Estructura lista LIFO (Last In First Out), el último en entrar es el primero en salir.
EjemplosEj emplos
SA
Estructuras de Datos 14
SA
Listas doblemente Listas doblemente enlazadas enlazadas
Listas doblemente Listas doblemente enlazadas enlazadas
Estructuras de Datos 15
Estructuras dinámicas que están compuestas por un conjunto de estructuras llamados nodos, que están enlazados uno con el otro por medio de dos campos de tipo puntero.
ConceptoConcepto
Caracter íst iCaracter íst icascas
Ej emplosEj emplos
Estructura lineal. Cada nodo tendrá dos apuntadores. Anterior y siguiente. El puntero siguiente del último elemento debe apuntar hacia NULL (el fin de la lista). El puntero anterior del primer elemento debe también apuntar hacia NULL(el inicio de
la lista),
struct lista{ int dato; struct lista *siguiente, *anterior;};
SA
Estructuras de Datos 16
SA
Estructuras circulares Estructuras circulares Estructuras circulares Estructuras circulares
Estructuras de Datos 17
Una lista circular es una lista lineal en la que el último nodo a punta al primero.
ConceptoConcepto
Caracter í st iCaracter í st icascas
Ej emplosEj emplos
Cada nodo siempre tiene uno anterior y uno siguiente.
En algunas listas circulares se añade un nodo especial de cabecera.
typedef struct _nodo{ int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista;
SA
Estructuras de Datos 18
SA
RecursividadRecursividadRecursividadRecursividad
No todas las funciones pueden llamarse a sí mismas, sino que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente.
Estructuras de Datos 19
Permite que una función pueda llamarse asimismo desde la misma función.
Se puede utilizar como una alternativa a la iteración.
Es una herramienta poderosa e importante en la resolución de problemas en programación.
Su uso permite a los programadores especificar las soluciones naturales, más lógicas, elegantes, sencillas, que serían, en caso contrario difícil de resolver.
Tampoco todos los lenguajes de programación permiten usar recursividad. C++ permite la recursividad.
SA
RecursividadRecursividadRecursividadRecursividad
Estructuras de Datos 20
/* Función recursiva para cálculo de factoriales */int factorial(int n){ if(n < 0) return 0; else if(n > 1) return n*factorial(n-1); /* Recursividad */ return 1; /* Condición de terminación, n == 1 */ }
/*Función recursiva para la Serie fibonacci*/#include<stdio.h> int fibonacci(int n) { if (n<2) return n; else return fibonacci(n-1) + fibonacci(n-2); } int main() { int num=0,res=0; printf("::NUMEROS DE FIBONACCI::\n"); printf("Introduce el numero de numeros: "); scanf("%i",&num); for(int i=0;i<=num-1;i++) { res = fibonacci(i); printf("%i ", res); } printf("\n"); return 0; }
S
A
Estructuras de Datos 21
SA
Recursividad versus Recursividad versus iteracióniteración
Recursividad versus Recursividad versus iteracióniteración
1- Ambas realizan una repetición:a)Solución iterativa repite el cuerpo del bucle.b)Solución recursiva repite las llamadas al método recursivo.
Estructuras de Datos 22
2- Ambas tienen una condición de terminación.a)Solución iterativa: termina cuando se incumple la condición de continuación del bucle.b)Solución recursiva: se termina cuando una llamada alcanza el caso base (inducción) desencadenando una secuencia de vuelta atrás.
3- Ambas se deben diseñar para converger a la solución (principio de convergencia, y que no se salten la condición de terminación).a)Solución iterativa: se llega a cumplir la condición de terminación (esto se debe garantizar).b)Solución recursiva: se debe garantizar que se llegue al caso base.
Toda solución recursiva puede encontrar Toda solución recursiva puede encontrar una solución iterativa equivalente, una solución iterativa equivalente, mientras que lo contrario no siempre es mientras que lo contrario no siempre es cierto.cierto.
SA
Estructuras de Datos 23
SA
Árboles binariosÁrboles binariosÁrboles binariosÁrboles binarios
Estructuras de Datos 24
Es el que cada elemento apunta como máximo a otros 2 elementos, comúnmente llamados hijo izquierdo y hijo derecho.
ConceptoConcepto
Caracter íst iCaracter íst icascas
Un árbol binario de buque da o ABB, es un árbol binario en el cual para todo elemento, los elementos mayores a él, se ubican en su rama derecha, mientras que los elementos menores van en su rama izquierda. Cada elemento se almacena una sola vez por lo que no existen elementos repetidos.
SA
Árboles binariosÁrboles binariosÁrboles binariosÁrboles binarios
Estructuras de Datos 25
EjemplosEj emplos
ABB crearNodo(int x){ ABB nuevoNodo = new(struct nodo); nuevoNodo->nro = x; nuevoNodo->izq = NULL; nuevoNodo->der = NULL; return nuevoNodo; }
void insertar(ABB &arbol, int x){ if(arbol==NULL) { arbol = crearNodo(x); } else if(x < arbol->nro) insertar(arbol->izq, x); else if(x > arbol->nro) insertar(arbol->der, x); }
S
A
Estructuras de Datos 26
S
A
EnOrdenEnOrdenEnOrdenEnOrden
Estructuras de Datos 27
Si visitamos primero hijo izquierdo, luego el padre y finalmente el hijo derecho
ConceptoConcepto
Ej emplosEj emplos
void enOrden(ABB arbol) { if(arbol!=NULL) { enOrden(arbol->izq); cout << arbol->nro << " "; enOrden(arbol->der); } } S
A
PreOrdenPreOrdenPreOrdenPreOrden
Estructuras de Datos 28
Primero el padre, luego el hijo izquierdo y finalmente el hijo derecho.
ConceptoConcepto
Ej emplosEj emplos
void preOrden(ABB arbol) { if(arbol!=NULL) { cout << arbol->nro <<" "; preOrden(arbol->izq); preOrden(arbol->der); }} S
A
PostOrdenPostOrdenPostOrdenPostOrden
Estructuras de Datos 29
Primero hijo izquierdo, luego el hijo derecho y finalmente el padre.
ConceptoConcepto
Ej emplosEj emplos
void postOrden(ABB arbol){ if(arbol!=NULL) { postOrden(arbol->izq); postOrden(arbol->der); cout << arbol->nro << " "; }} S
A
Estructuras de Datos 30
SA
GrafosGrafosGrafosGrafos
Estructuras de Datos 31
ConceptoConcepto
Caracter íst iCaracter íst icascas
Ej emplosEj emplos
SA
Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre elementos de un conjunto.
Son objeto de estudio de la teoría de grafos.Típicamente, un grafo se representa gráficamente como un conjunto de puntos
V:={ 1,2,3,4,5,6}E:={ { 1,2} ,{ 1,5} ,{ 2,3} ,{ 2,5} ,{ 3,4} ,{ 4,5} ,{ 4,6} }El hecho que el vértice 1 sea adyacente con el vértice 2 puede ser denotado como 1 ~ 2.
Estructuras de Datos 32
SA
Archivos secuencialesArchivos secuencialesArchivos secuencialesArchivos secuenciales
Estructuras de Datos 33
Se componen de un conjunto de registros donde cada registro como tal es una línea de datos donde cada una
posee un inicio y un final.
ConceptoConcepto
Se maneja como documento de datos que siguen el orden a como están
escritos.
Son aquellos archivos que también se conocen como archivos planos.
Todos se almacenan por posiciones consecutivas.
SA
Estructuras de Datos 34
SA
Archivos secuencialesArchivos secuencialesArchivos secuencialesArchivos secuenciales
Estructuras de Datos 35
Se componen de un conjunto de registros de datos los cuales responden a una estructura de registro de una
entidad dada.
ConceptoConcepto
Identificación
123
SalarioNombre
100000000Pedro
Estructura del registro
Registro de datos
SA
Estructuras de Datos 36
SA
Estructura del registro y Estructura del registro y registro de datosregistro de datos
Estructura del registro y Estructura del registro y registro de datosregistro de datos
Estructuras de Datos 37
Identificación
123
SalarioNombre
100000000Pedro
Estructura del registro
Registro de datos
Conjunto de campos, características o atributos relacionados entre si, los cuales responden a una
entidad dada.
Conjunto de datos relacionados entre si, los cuales responden a una estructura de registro dada.
SA
Estructuras de Datos 38
SA
Modo de operaciónModo de operaciónModo de operaciónModo de operación
Estructuras de Datos 39
Modo de operación Descripción
r Abrir un archivo solo para lectura.
wCrear un archivo para escritura. Si ya existe se borra el contenido actual.
aAgregar, abrir o crear un archivo para escribir registros al final del mismo.
r+ Abrir y escribir en un archivo.
w+Crear un archivo para actualizar. Si ya existe se borra el contenido actual.
a+
Agregar, abrir o crear un archivo para actualizar, la escritura se efectuará al final del mismo
SA
Estructuras de Datos 40
SA
Archivos directos, Archivos directos, ejemplosejemplos
Archivos directos, Archivos directos, ejemplosejemplos
Estructuras de Datos 41
#include <iostream> #include <stdlib.h>
struct nodo{ int nro; struct nodo *izq, *der; }; typedef struct nodo *ABB; /* es un puntero de tipo nodo que hemos llamado ABB,*//*que ulitizaremos para mayor facilidad de creacion de variables */
ABB crearNodo(int x) { ABB nuevoNodo = new(struct nodo); nuevoNodo->nro = x; nuevoNodo->izq = NULL; nuevoNodo->der = NULL; return nuevoNodo; }
void insertar(ABB &arbol, int x){ i f (arbol==NULL) { arbol = crearNodo(x); } else if (x < arbol->nro) insertar(arbol->izq, x); else if(x > arbol->nro) insertar(arbol->der, x);}
void verArbol(ABB arbol, int n){ i f(arbol==NULL) return; verArbol(arbol->der, n+1); for(int i=0; i<n; i++) cout<<" "; cout<< arbol->nro <<endl; verArbol(arbol->izq, n+1);}
void main() { ABB arbol = NULL; // creado Arbol int n; // numero de nodos del arbol int x; // elemento a insertar en cada nodo cout << "\n\t\t ..[ ARBOL BINARIO DE BUSQUEDA ].. \n\n"; cout << " Numero de nodos del arbol: "; cin >> n; cout << endl; for(int i=0; i<n; i++) { cout << " Numero del nodo " << i+1 << ": "; cin >> x; insertar( arbol, x); } cout << "\n Mostrando ABB \n\n"; verArbol( arbol, 0); }
S
A
Estructuras de Datos 42
S
A
ConclusiónConclusiónConclusiónConclusiónEn la elaboración de este trabajo pude:
Estructuras de Datos 43
Aprendí nuevos conceptos, características y ejemplos de los temas.
Puse a prueba el uso de la creatividad en la elaboración del trabajo.
Reafirmar el significado de varios conceptos, que aunque ya conocía tenía que refrescarlos y saber más detalles sobre ellos.
SA
Estructuras de Datos 44
SA
BibliografíaBibliografíaBibliografíaBibliografía• Lenguaje de programación C, Introducción a la programación en C. Mario Gómez Moraga.• http://recursividadenc.blogspot.com/2012/03/recursividad-en-c.html• http://btocastro.blogspot.com/2011/07/recursividad-vs-iteracion.html• https://www.google.co.cr/imghp?hl=es&tab=ii• http://es.kioskea.net/faq/2842-la-lista-enlazada-simple• http://casicodigo.blogspot.com/2012/10/colas-en-c.html• http://www.conclase.net/c/edd/?cap=002• http://www.conclase.net/c/edd/?cap=004• http://casicodigo.blogspot.com/2012/11/arboles-binarios-de-busqueda-c.html• http://www.slideshare.net/luismy_martinez/archivo-secuencial• http://es.wikipedia.org/wiki/Grafo
Estructuras de Datos 45
A