45
TRABAJO EXTRA CLASE DE PROGRAMACIÓN II TRIMESTRE Kimberly Mora Chaves 11-2 Estructuras de Datos 1 S

Estructuras en C++

Embed Size (px)

DESCRIPTION

Listas enlazadas dobles y simples Colas,pilas Archivos

Citation preview

Page 1: Estructuras en C++

TRABAJO EXTRA CLASE DE

PROGRAMACIÓNII TRIMESTRE

Kimberly Mora Chaves 11-2

Estructuras de Datos 1

S

Page 2: Estructuras en C++

Estructuras de Datos 2

A

S

Page 3: Estructuras en C++

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

Page 4: Estructuras en C++

Estructuras de Datos 4

SA

Page 5: Estructuras en C++

Í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

Page 6: Estructuras en C++

Estructuras de Datos 6

SA

Page 7: Estructuras en C++

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

Page 8: Estructuras en C++

Estructuras de Datos 8

SA

Page 9: Estructuras en C++

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

Page 10: Estructuras en C++

Estructuras de Datos 10

SA

Page 11: Estructuras en C++

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

Page 12: Estructuras en C++

Estructuras de Datos 12

SA

Page 13: Estructuras en C++

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

Page 14: Estructuras en C++

Estructuras de Datos 14

SA

Page 15: Estructuras en C++

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

Page 16: Estructuras en C++

Estructuras de Datos 16

SA

Page 17: Estructuras en C++

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

Page 18: Estructuras en C++

Estructuras de Datos 18

SA

Page 19: Estructuras en C++

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

Page 20: Estructuras en C++

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

Page 21: Estructuras en C++

Estructuras de Datos 21

SA

Page 22: Estructuras en C++

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

Page 23: Estructuras en C++

Estructuras de Datos 23

SA

Page 24: Estructuras en C++

Á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

Page 25: Estructuras en C++

Á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

Page 26: Estructuras en C++

Estructuras de Datos 26

S

A

Page 27: Estructuras en C++

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

Page 28: Estructuras en C++

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

Page 29: Estructuras en C++

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

Page 30: Estructuras en C++

Estructuras de Datos 30

SA

Page 31: Estructuras en C++

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.

Page 32: Estructuras en C++

Estructuras de Datos 32

SA

Page 33: Estructuras en C++

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

Page 34: Estructuras en C++

Estructuras de Datos 34

SA

Page 35: Estructuras en C++

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

Page 36: Estructuras en C++

Estructuras de Datos 36

SA

Page 37: Estructuras en C++

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

Page 38: Estructuras en C++

Estructuras de Datos 38

SA

Page 39: Estructuras en C++

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

Page 40: Estructuras en C++

Estructuras de Datos 40

SA

Page 41: Estructuras en C++

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

Page 42: Estructuras en C++

Estructuras de Datos 42

S

A

Page 43: Estructuras en C++

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

Page 44: Estructuras en C++

Estructuras de Datos 44

SA

Page 45: Estructuras en C++

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