lic gonzalo pastorpunteros recomendado: 1. nivelación funciones menú vectores string 2. memoria...

12
Lic Gonzalo Pasto Punteros Punteros Recomendado: http://c.conclase.net 1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas Colas Listas Árboles 3. Archivos Archivos de texto Archivos Binarios

Upload: purificacion-palma-padilla

Post on 02-Feb-2016

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic Gonzalo Pastor

PunterosPunteros

Recomendado: http://c.conclase.net

1. NivelaciónFunciones

MenúVectores

String2. Memoria Dinámica

RecursividadPunterosPilasColasListasÁrboles

3. ArchivosArchivos de textoArchivos Binarios

Page 2: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

PunterosPunteros►Un Puntero es una variable que tiene la Un Puntero es una variable que tiene la

dirección de memoria de otra variable.dirección de memoria de otra variable.►Por ejemplo: si la variable Por ejemplo: si la variable cc almacena un almacena un

char y char y pp es un puntero a es un puntero a cc, se , se representaría:representaría:

►El El && es un operador que devuelve la es un operador que devuelve la dirección de memoria de una variabledirección de memoria de una variable

p = &c;p = &c;►Se dice que p apunta a c.Se dice que p apunta a c.

cp

Page 3: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

OperadoresOperadores►&& Devuelve la dirección de memoria de Devuelve la dirección de memoria de

una variable una variable

Ya era usado en scanf()Ya era usado en scanf()

No se usaba con vectores y string porque No se usaba con vectores y string porque éstos son punteros al primer valor.éstos son punteros al primer valor.

►** es el operador de indirección o es el operador de indirección o desreferencia, devuelve el contenido de desreferencia, devuelve el contenido de memoria apuntada por un punteromemoria apuntada por un puntero

Page 4: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

EjemploEjemplo

► int x = 1, y= 2, int x = 1, y= 2, z[10];z[10];

► int *ip;int *ip;► ip = &x;ip = &x;► y = *ip;y = *ip;► *ip = 0;*ip = 0;► ip = &z[0];ip = &z[0];► ip++;ip++;

//Se declara x, y, z//Se declara x, y, z

//ip apunta a un entero//ip apunta a un entero

//ip apunta a x//ip apunta a x

//y = 1//y = 1

//x es ahora 0//x es ahora 0

//ip apunta al vector z[0]//ip apunta al vector z[0]

//ip apunta a z[1]//ip apunta a z[1]

Page 5: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

Asignación DinámicaAsignación Dinámica► Los punteros proporcionan el soporte necesario Los punteros proporcionan el soporte necesario

para el potente sistema de asignación dinámica para el potente sistema de asignación dinámica de memoria de C. de memoria de C.

► La asignación dinámica es la forma en la que La asignación dinámica es la forma en la que un programa puede obtener memoria mientras un programa puede obtener memoria mientras se está ejecutando.se está ejecutando.

► A las variables globales por ejemplo, se les A las variables globales por ejemplo, se les asigna memoria en tiempo de compilación.asigna memoria en tiempo de compilación.

►Durante la ejecución no se pueden añadir Durante la ejecución no se pueden añadir variables globales o locales, pero existen variables globales o locales, pero existen ocasiones en las que un programa necesita ocasiones en las que un programa necesita usar cantidades de memoria variables.usar cantidades de memoria variables.

Page 6: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

NEW - Asigna memoriaNEW - Asigna memoria

► New devuelve una referencia a una posición en New devuelve una referencia a una posición en memoria que a guardar el tipo indicado en la memoria que a guardar el tipo indicado en la sentencia new. sentencia new.

► Tras una llamada fructífera, new devuelve un Tras una llamada fructífera, new devuelve un puntero. Si no hay suficiente memoria libre puntero. Si no hay suficiente memoria libre para satisfacer la petición, se da un fallo de para satisfacer la petición, se da un fallo de asignación y devuelve un asignación y devuelve un NULLNULL. .

► El siguiente código asigna memoria para El siguiente código asigna memoria para guardar datos de una estructura persona:guardar datos de una estructura persona:

persona *p; persona *p; p = new persona;p = new persona;

Page 7: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

DELETE – Libera memoriaDELETE – Libera memoria►La instrucción delete es la opuesta a new La instrucción delete es la opuesta a new

porque devuelve al sistema la memoria porque devuelve al sistema la memoria previamente asignada. previamente asignada.

►Una vez que la memoria ha sido liberada, Una vez que la memoria ha sido liberada, puede ser reutilizada en una posterior puede ser reutilizada en una posterior llamada a new. llamada a new.

►Ejemplo:Ejemplo:

persona *p; persona *p; p = new persona; p = new persona;

…………....

delete p;delete p;

Page 8: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

Estructuras Dinámicas de Estructuras Dinámicas de DatosDatos► Las estructuras básicas disponibles en C y C++ Las estructuras básicas disponibles en C y C++

tienen una importante limitación: no pueden tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. cambiar de tamaño durante la ejecución.

► Los vectores están compuestos por un Los vectores están compuestos por un determinado número de elementos, número determinado número de elementos, número que se decide en la fase de diseño, antes de que se decide en la fase de diseño, antes de que el programa ejecutable sea creado.que el programa ejecutable sea creado.

► En muchas ocasiones se necesitan estructuras En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la que puedan cambiar de tamaño durante la ejecución del programa. ejecución del programa.

► Podemos hacer vectores dinámicos, pero una Podemos hacer vectores dinámicos, pero una vez creados, su tamaño también será fijo, y vez creados, su tamaño también será fijo, y para hacer que crezcan o diminuyan de para hacer que crezcan o diminuyan de tamaño, deberemos reconstruirlos desde el tamaño, deberemos reconstruirlos desde el principio.principio.

Page 9: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

Estructuras Dinámicas de Estructuras Dinámicas de DatosDatos► Las estructuras dinámicas nos permiten crear Las estructuras dinámicas nos permiten crear

estructuras de datos que se adapten a las estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse necesidades reales a las que suelen enfrentarse nuestros programas. nuestros programas.

► También nos permitirán crear estructuras de También nos permitirán crear estructuras de datos muy flexibles, ya sea en cuanto al orden, datos muy flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los la estructura interna o las relaciones entre los elementos que las componen.elementos que las componen.

► Las estructuras de datos están compuestas de Las estructuras de datos están compuestas de otras pequeñas estructuras a las que otras pequeñas estructuras a las que llamaremos llamaremos nodosnodos, que agrupan los datos con , que agrupan los datos con los que trabajará nuestro programa y además los que trabajará nuestro programa y además uno o más uno o más punteros autoreferencialespunteros autoreferenciales, es decir, , es decir, punteros a objetos del mismo tipo nodo. punteros a objetos del mismo tipo nodo.

Page 10: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

NodosNodos►Una estructura básica de un nodo para Una estructura básica de un nodo para

crear listas de datos sería:crear listas de datos sería:

►El campo “siguiente" apunta a un objeto El campo “siguiente" apunta a un objeto del tipo nodo. del tipo nodo.

►De este modo, cada nodo puede usarse De este modo, cada nodo puede usarse como un ladrillo para construir listas de como un ladrillo para construir listas de datos, y cada uno mantendrá ciertas datos, y cada uno mantendrá ciertas relaciones con otros nodos.relaciones con otros nodos.

Page 11: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

NodosNodos►Para acceder a un nodo de la estructura Para acceder a un nodo de la estructura

sólo necesitaremos un puntero al primer sólo necesitaremos un puntero al primer nodo.nodo.

►El nodo anterior se representará así:El nodo anterior se representará así:►En estos tipos de datos el interés se En estos tipos de datos el interés se

centra más en la estructura de los datos centra más en la estructura de los datos que en el tipo concreto de información que en el tipo concreto de información que almacenan.que almacenan.

►Dependiendo del número de punteros y Dependiendo del número de punteros y de las relaciones entre nodos, podemos de las relaciones entre nodos, podemos distinguir varios tipos de estructuras distinguir varios tipos de estructuras dinámicas. dinámicas.

Page 12: Lic Gonzalo PastorPunteros Recomendado:  1. Nivelación Funciones Menú Vectores String 2. Memoria Dinámica Recursividad Punteros Pilas

Lic G

onzalo Pa

stor

Estructuras a EstudiarEstructuras a Estudiar► PilasPilas: conocidas como listas LIFO (Last In, First Out: : conocidas como listas LIFO (Last In, First Out:

el último en entrar es el primero en salir). Los el último en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de modo que elementos se "amontonan" o apilan, de modo que sólo el elemento que está encima de la pila puede sólo el elemento que está encima de la pila puede ser leído, y sólo pueden añadirse elementos encima ser leído, y sólo pueden añadirse elementos encima de la pila. de la pila.

► ColasColas: conocidas como listas FIFO (First In, First Out: : conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero sólo pueden elementos se almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro. añadirse por un extremo y leerse por el otro.

► ListasListas: cada elemento sólo dispone de un puntero, : cada elemento sólo dispone de un puntero, que apuntará al siguiente elemento de la lista o que apuntará al siguiente elemento de la lista o valdrá NULL si es el último elemento. Cada dato valdrá NULL si es el último elemento. Cada dato queda ordenadoqueda ordenado

► Arboles BinariosArboles Binarios: cada elemento dispone de dos : cada elemento dispone de dos punteros, pero las referencias nunca son a punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se elementos anteriores, de modo que la estructura se ramifica y crece igual que un árbol.ramifica y crece igual que un árbol.