301305 Estructura de Datos
Short Description
Download 301305 Estructura de Datos...
Description
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA PROGRAMA INGENIERÍA DE SISTEMAS
301305 – ESTRUCTURA DE DATOS HERMES MOSQUERA ANGULO (Director Nacional)
CARLOS ROBERTO ROJAS Acreditador
POPAYAN Enero de 2011
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
INDICE DE CONTENIDO
UNIDAD 1. MEMORIA DINÁMICA……………..……………………………………..13 CAPITULO 1: APUNTADORES ........................................................................... 15 Lección 1: Conceptos básicos de apuntadores .................................................. 15 Lección 2: Variables Automáticas y Apuntadores .............................................. 18 Lección 3: Apuntadores y Cadenas ................................................................... 21 Lección 4: Paso de Arreglos Como Parámetros ................................................ 23 Lección 5: Apuntadores a Apuntadores ............................................................. 27 CAPITULO 2: GESTIÓN DINÁMICA DE MEMORIA ............................................ 31 Lección 6: Conceptos Básicos de Memoria ....................................................... 31 Lección 7: Tipos de datos comunes ................................................................... 32 Lección 8: Tipos de Variables ............................................................................ 35 Lección 9: Variables Dinámicas ......................................................................... 36 Lección 10: Asignar y Liberar Espacios de Memoria ......................................... 37 CAPITULO 3: OPERADORES Y FUNCIONES EN LA GESTIÓN DE MEMORIA .............................................................................................................................. 40 Lección 11: Operadores New y Delete............................................................... 40 Lección 12: Más acerca de la Implementación de New y Delete ....................... 44 Lección 13: Funciones Malloc() y Free() ............................................................ 47 Lección 14: Aplicación a la asignación de memoria con Malloc() y Free() ......... 48 Lección 15: Otras funciones para asignar memoria dinámica ............................ 50
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
UNIDAD 2. ESTRUCTURAS DE DATOS LINEALES……………………….……...56 CAPITULO 4: PILAS ............................................................................................ 59 Lección 1: Conceptos básicos de pilas .............................................................. 59 Lección 2: Operaciones realizadas con pilas ..................................................... 60 Lección 3: Operaciones básicas con pilas paso a paso ..................................... 62 Lección 4: Análisis del código propuesto para implementar una pila ................. 70 Lección 5: Aplicación de las estructuras lineales tipo pilas ................................ 75 CAPITULO 5: COLAS .......................................................................................... 82 Lección 6: Conceptos básicos de colas ............................................................. 82 Lección 7: Operaciones básicas con colas ........................................................ 84 Lección 8: Implementación de las Colas por medio de Punteros ....................... 87 Lección 9: Implementación del código completo de la cola ............................... 90 Lección 10: Aplicación de una cola en un entorno real planificador de citas ..... 93 CAPITULO 6: LISTAS .......................................................................................... 97 Lección 11: Concepto básicos de Listas ............................................................ 97 Lección 12: Listas enlazadas ............................................................................. 99 Lección 13: Más a cerca de listas enlazadas ................................................... 105 Lección 14: Listas doblemente enlazadas ....................................................... 109 Lección 15: Listas circulares ............................................................................ 117 UNIDAD 3. ESTRUCTURAS DE DATOS NO LINEALES……….………...……..125 CAPITULO 7: ÁRBOLES ................................................................................... 131 Lección 1: Teoría general de Árboles .............................................................. 131 Lección 2: Otros conceptos de la teoría general de árboles ........................... 132 Lección 3: Árbol completo ................................................................................ 133
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Lección 4: Estructura para la creación de un árbol de orden tres .................... 134 Lección 5. Introducción al Modo Gráfico de C++ ............................................. 136 CAPITULO 8: ÁRBOLES BINARIOS ................................................................. 142 Lección 6: Conceptualización de Arboles Binarios........................................... 142 Lección 7: Clasificación de los árboles binarios ............................................. 1477 Lección 8: Formas de Recorrer un Árbol Binario ............................................. 149 Lección 9: Ábol binario de búsqueda (ABB) ..................................................... 154 Lección 10: Operaciones en ABB .................................................................... 157 CAPITULO 3: GRAFOS...................................................................................... 176 Lección 11: Conceptos básicos de grafos ........................................................ 176 Lección 12: Grafo no dirigido ........................................................................... 178 Lección 13: Representación de los grafos ..................................................... 1800 Lección 14: Representación mediante listas de Adyacencia ......................... 1833 Lección 15: Exploración de grafos ................................................................. 1855
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
LISTADO DE TABLAS
Tabla 1………………………………………………………………………………….30 Tabla 2………………………………………………………………………………….31
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
LISTADO DE GRÁFICOS Y FIGURAS Figura 1 Salida en pantallade progra1.cpp ............................................................ 17 Figura 2 Salida en pantalla de progra2.cpp ........................................................... 19 Figura 3 Salida en pantalla de progra3.cpp ........................................................... 21 Figura 4 Salida en pantalla de progra4.cpp ........................................................... 22 Figura 5 Salida en pantalla de progra5.cpp ........................................................... 23 Figura 6 Salida en pantalla de progra6.cpp ........................................................... 25 Figura 7 Salida en pantalla de progra7.cpp ........................................................... 26 Figura 8 Salida en pantalla de progra8.cpp ........................................................... 27 Figura 9 Salida en pantalla de progra9.cpp ........................................................... 28 Figura 10 Salida en pantalla de progra10.cpp ....................................................... 30 Figura 11 Salida en pantalla de progra11.cpp ....................................................... 34 Figura 12 Salida en pantalla de progra12.cpp ....................................................... 36 Figura 13Salida en pantalla de progra13.cpp ........................................................ 37 Figura 14 Salida en pantalla de progra14.cpp ....................................................... 39 Figura 15 Salida en pantalla de progra15.cpp ....................................................... 42 Figura 16 Salida en pantalla de progra16.cpp ....................................................... 45 Figura 17 Salida en pantalla de progra17.cpp ....................................................... 46 Figura 18 Salida en pantalla de progra18.cpp ....................................................... 48 Figura 19 Salida en pantalla de progra19.cpp ....................................................... 50 Figura 20 Representación gráfica de una pila de monedas .................................. 60 Figura 21 Entrada y salida de elementos de una pila ............................................ 61
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Figura 22 Declaración de la estructura pila ........................................................... 64 Figura 23 Menú de opciones de la pila .................................................................. 66 Figura 24 Definición de la función insertar() .......................................................... 66 Figura 25 La función insertar() en el case 1 .......................................................... 67 Figura 26 Instrucciones de la función insertar() ..................................................... 68 Figura 27 Vista de la definición de las funciones insertar, visualizar y extraer ...... 70 Figura 28 Salida en pantalla de Progra21.cpp ...................................................... 75 Figura 29 Salida en pantalla de Progra22.cpp ...................................................... 78 Figura 30 Salida en pantalla de Progra23.cpp ...................................................... 81 Figura 31 Representación gráfica de una cola de personas. ................................ 83 Figura 32 Representación gráfica de una cola ...................................................... 84 Figura 33 Salida en pantalla de progra24.............................................................. 87 Figura 34 Salida en pantalla de Progra25.cpp ...................................................... 93 Figura 35 Salida en pantalla de progra26.cpp ....................................................... 96 Figura 36 Representación gráfica de una lista contigua ........................................ 99 Figura 37 Representación gráfica de listas enlazadas ........................................ 100 Figura 38 Salida en pantalla de Progra27.cpp .................................................... 105 Figura 39 Salida en pantalla de progra28.cpp ..................................................... 106 Figura 40 Salida en pantalla de progra29.cpp ..................................................... 108 Figura 41 Representación gráfica de una lista doblemente enlazada ................. 109 Figura 42 Salida en pantalla de progra30.cpp ..................................................... 117 Figura 43 Representación gráfica de una Lista Circular ...................................... 118 Figura 44 Lista circular simplemente enlazada ................................................... 119 Figura 45 Lista circular doblemente enlazada ..................................................... 119
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Figura 46 Primer nodo de la lista circular ............................................................ 120 Figura 47 Inserción del segundo nodo ................................................................ 120 Figura 48 Nuevo nodo insertado en la lista circular ............................................. 121 Figura 49 Salida en pantalla de progra31.cpp ..................................................... 124 Figura 50 Representación gráfica de árboles ...................................................... 132 Figura 51 Interfaz gráfica del compilador Borland C++ 5.5. ................................ 138 Figura 52 Activación de las librerías Gráficas .......... ¡Error! Marcador no definido. Figura 53 Configuración de directorio para BGI .................................................. 139 Figura 54 Interfaz de directorios de C++. ............................................................ 139 Figura 55 Inclusión de la ruta C:\TC\BGI ............................................................. 140 Figura 56 Salida en pantalla de progra32 Modo grafico de C++. ........................ 141 Figura 57 Estructura de un árbol binario ............................................................. 142 Figura 58 Representación gráfica de un árbol binario ......................................... 143 Figura 59 Representación gráfica del subárbol izquierdo.................................... 143 Figura 60 Representación gráfica del subárbol derecho ..................................... 144 Figura 61 Representación gráfica de un nodo padre .......................................... 144 Figura 62 Representación gráfica de un nodo hoja ............................................. 145 Figura 63 Camino del árbol ................................................................................. 145 Figura 64 Longitud del árbol binario .................................................................... 146 Figura 65 Nivel del árbol...................................................................................... 147 Figura 66 Representación gráfica de un árbol binario completo. ........................ 147 Figura 67 Representación gráfica de Árbol binario igual ..................................... 148 Figura 68 Representación gráfica de árboles semejantes................................... 149 Figura 69 Representación gráfica de árboles isomorfos ..................................... 149
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Figura 70 Recorrido del árbol binario en preorden ............................................. 150 Figura 71 Resultado del recorrido en preorden del árbol .................................... 150 Figura 72 Representación gráfica del recorrido en Inorden................................. 152 Figura 73 Recorrido en Postorden del árbol binario. ........................................... 153 Figura 74 Árbol binario como aplicación a los tres recorridos ............................. 154 Figura 75 Borrado de un nodo rama con intercambio de nodo hoja .................... 157 Figura 76 Representación gráfica de un árbol binario de búsqueda ................... 158 Figura 77 Borrado de un nodo rama con intercambio de nodo rama .................. 158 Figura 78 Intercambio de un nodo rama con intercambio de nodo rama ............ 159 Figura 79 Salida en pantalla de progra34............................................................ 167 Figura 80 Representación gráfica de los grafos .................................................. 177 Figura 81 Representación gráfica de un gráfo dirigido ........................................ 178 Figura 82 Representación gráfica de un grafo no dirigido ................................... 178 Figura 83 Representación gráfica de grafos etiquetados .................................... 179 Figura 84 Representación gráfica de la longitud del camino de un grafo ............ 179 Figura 85 Grafo dirigido ...................................................................................... 181 Figura 86 Representación gráfica de la matriz de adyacencia ............................ 181 Figura 87 Representación gráfica de un grafo por lista de adyacencia ............... 183 Figura 88 Representación grafica de un grafo .................................................... 186
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
ASPECTOS DE PROPIEDAD INTELECTUAL Y VERSIONAMIENTO
La versión uno del presente módulo fue diseñado en el año 2004 por el Ing. Iván Arturo López, docente de la UNAD, ubicado en el CEAD de Popayán, el Ing. López es Ingeniero de Sistemas, Especialista en Pedagogía Para el Desarrollo del Aprendizaje Autónomo y Magister en Educación y TIC’s, se ha desempeñado como Tutor y Docente de la UNAD desde el año 2000. La versión dos del presente módulo fue desarrollada por el Ing. Hermes Mosquera Angulo en el año 2007, quien ha sido Tutor de la UNAD en el CEAD Popayán, desde el año 2006, se desempeña actualmente como Director del cuso a nivel nacional desde el año 2007.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
INTRODUCCIÓN
El curso de estructura de datos cobra vital importancia en la aplicación de la programación estructurada y al cual se le puede sacar el máximo provecho, puesto que se requiere que los estudiantes que abordan el curso tengan los conocimientos previos, tratados en los cursos anteriores de Algoritmos e Introducción a la programación. Estructura de datos es un curso metodológico de compuesto de tres unidades didácticas en donde se combina la parte teórica con la parte práctica, con el desarrollo de pequeños programas de aplicación basados en entornos reales. En ese sentido, el curso inicia con la primera unidad en la que se tratan temas como los fundamentos básicos de apuntadores, asignación dinámica de memoria al igual que los operadores y funciones para la gestión de memoria. Se propone una metodología de trabajo en la que se invita al estudiante a realizar una lectura detallada de cada lección con el propósito de profundizar en la conceptualización; posteriormente en la mayoría de temas se proponen códigos fuente completos que sirven como ejemplos de programas de aplicación a la temática tratada. Estos códigos pueden ser llevados a cualquier compilador de C++, para el curso se propone el compilador Turbo C++ 3.0 para plataformas Windows XP y el compilador Borland C++ 5.5 para plataformas Windows Vista y Windows 7, por su facilidad de uso amigabilidad y preconfiguración, para el caso de plataforma Linux puede emplearse el editor que trae por defecto para programas C++. Los compiladores pueden ser descargados directamente del sitio https://sites.google.com/site/hhmosquera/file-cabinet. En la segunda unidad se profundiza en temas relacionados con las estructuras de datos lineales, donde se abordan los temas como pilas, colas, listas, desarrollados con apuntadores, brindando al estudiante los fundamentos y competencias necesarias para brindar soluciones en programación a entornos reales. Final en la tercera unidad se continúa con la profundización y aplicación de las estructura de datos no lineales se podría hablar de estructuras jerárquicas con los temas de árboles y grafos los cuales inducen al estudiante a trabajar con el modo gráfico de C++ como acercamiento a la programación orientada a objetos. En el curso se incluyen ejercicios prácticos, realizados por diferentes autores, sitios web como referencia y una amplia bibliografía externa y también existente en la biblioteca virtual de la UNAD, que sin duda llevara al estudiante a un aprendizaje autónomo y significativo.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
UNIDAD 1 Nombre de la Unidad
Introducción
MEMORIA DINÁMICA La memoria del computador es un recurso invaluable de mucha importancia en el procesamiento de información, que requiere darle un buen uso por parte de los programadores con el fin de optimizar espacios en memoria. Por esta razón, en esta, la primera unidad del curso, se hace una introducción a conceptos básicos como apuntadores, asignación dinámica de memoria y operadores como new y delete propios de C++ y funciones como Malloc() y free(), propios de C. Igualmente están implícitas diferentes estrategias de pensamiento de orden superior que el estudiante irá descubriendo gracias al apoyo permanente del tutor, quien en es el mediador del proceso de aprendizaje. En el transcurso de la unidad, se desarrollan actividades que buscan determinar el grado de apropiación del conocimiento, basados en los tres momentos: reconocimiento, profundización y transferencia, sin dejar al lado el desarrollo del componente práctico que tiene como finalidad afianzar los conocimientos en pro de lograr la competencia del curso.
Justificación
La memoria de la computadora es un recurso invaluable y finito en cuanto asu capacidad, con muchos usos. Para el caso de los programadores de computados, solo uno y es guardar información. Por tal razón es importante darle un buen manejo a la memoria y esto se puede hacer cuando en el desarrollo de programas informáticos, se hace una buena definición de las de variables de acuerdo al tipo de información que se requiera almacena. Los datos significan la información con la cual trabaja un programa. En este mundo competitivo quien tiene la información tiene el poder. Ya sea que el programa esté trabajando con una lista de direcciones, monitoreando la bolsa de valores, manejando el presupuesto nacional o 12
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
cualquier otra situación, la información (nombres, precios de acciones, gastos) es guardada en la RAM de la computadora mientras el programa se esté ejecutando. Entra aquí el concepto de la gestión dinámica de memoria y los apuntadores, como un tipo de variables que permiten por medio de funciones y operadores asignar y liberar memoria dinámicamente en tiempo de ejecución, es decir mientras el programa está en marcha. Profundizar en la conceptualización del tipo de datos y los bytes requeridos que se manejan en el leguaje C++ contribuye al buen desarrollo de programas informáticos. Conocer y aplicar el funcionamiento de las estructuras de datos lineales. Profundizar en aspectos básicos en apuntadores y la asignación dinámica de memoria. Intencionalidades Formativas
Diferenciar Conceptualmente el uso y la aplicación de las variables estáticas y las variables dinámicas. Aplicar la conceptualización de los operadores y funciones para el manejo de la memoria dinámica.
Capítulo 1 Lección 1 Lección 2 Lección 3 Lección 4 Lección 5 Capítulo 2 Lección 6 Lección 7 Lección 8 Lección 9 Lección 10 Capítulo 3 Lección 11 Lección 12
Realizar aplicaciones en lenguaje C++ utilizando estructuras dinámicas de memoria APUNTADORES Conceptos básicos de apuntadores Variables Automáticas y Apuntadores Apuntadores y Cadenas Paso de Arreglos Como Parámetros Apuntadores a Apuntadores GESTIÓN DINÁMICA DE MEMORIA Conceptos Básicos de Memoria Tipos de datos comunes Tipos de Variables Variables Dinámicas Asignar y Liberar Espacios de Memoria OPERADORES Y FUNCIONES PARA LA GESTIÓN DE MEMORIA Operadores New y Delete Más acerca de la Implementación de New y Delete 13
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Lección 13 Lección 14 Lección 15
Funciones Malloc() y Free() Aplicación a la asignación de memoria con Malloc() y Free() Otras funciones para asignar memoria dinámica
14
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
CAPITULO 1: APUNTADORES Introducción En el presente capitulo se aborda la temática de los apuntadores y la aplicabilidad que tienen en el campo de la programación estructurada. Los apuntadores son un tipo especial de variables que guardan direcciones de otras variables. en los lenguajes de programación de C y C++. Proporcionan mucha utilidad al programador ya que permiten accesar y manipular datos de tal manera que no es posible realizarse en otros lenguajes llamados de alto nivel. Tambien son utiles para pasarle parametros a las funciones de tal modo que les permiten modificar y regresar valores a la rutina o función que hace el llamado. Cuando se utilizan incorrectamente, pueden producir algunos problemas de esrtabilidad en el sistema o también pueden presentar fallas en el programa en ejecución. De igualmanera se llevarán a cabo aplicaciones pequeñas de programas codificados en C++ como aplicación al uso de los apuntadores y a las operaciones que se pueden llevar a cabo. Cada uno de estos programas presenta en una figura la salida en pantalla, es decir todos están previamente compilados y depurados. Lección 1: Conceptos básicos de apuntadores Antes de definir qué es un puntero, veremos primero cómo se almacenan los datos en un computador. La memoria de un computador está compuesta por unidades básicas llamadas bits. Cada bit sólo puede tomar dos valores, normalmente denominados alto y bajo, ó 1 y 0. Pero trabajar con bits no es práctico, por eso se agrupan. Cada grupo de 8 bits forma un byte u octeto. En realidad el microprocesador, y por lo tanto nuestro programa, sólo puede manejar directamente bytes o grupos de dos o cuatro bytes. Para acceder a los bits hay que acceder antes a los bytes. Cada byte tiene una dirección, llamada normalmente dirección de memoria. Definición de Apuntadores Un apuntador es una variable, que almacena como contenido una dirección de memoria, de otra variable a la que apunta, dicha dirección representa el lugar donde se almacena un dato. Los apuntadores tienen un tipo de dato específico y 15
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
solo pueden apuntar a espacios de memoria con datos del mismo tipo. Por supuesto, a partir de esa dirección de memoria puede haber cualquier tipo de objeto: un char, un int, un float, un array, una estructura, una función u otro puntero. Serán los programadores los responsables de decidir ese contenido. Con los apuntadores es posible manipular estructuras de datos o asignar memoria dinámica. Los apuntadores son una de las herramientas más poderosas con que cuenta el Lenguaje C++. Desafortunadamente, muchos programadores han creado el mito de que el estudio de los apuntadores es muy complicado, lo cual ha desarrollado una fobia entre quienes se inician en el estudio de las estructuras dinámicas en lenguaje C++. Declaración de apuntadores Los apuntadores son variables automáticas cuyos valores representan direcciones de memoria correspondientes a otras variables del mismo tipo a las que apunta. La sintaxis para la declaración de una variable de tipo apuntador es la siguiente: tipo * identificador ; Donde, tipo hace referencia al tipo de datos de C++ como int, char, float, entre otros e identificador, hace referencia al nombre de la variable apuntador. Ejemplo: int *apunt; se declara el apuntador apunt de tipo entero. Se dice que: "apunt va a apuntar a variables de tipo int" donde apunt es el nombre del apuntador y (*) es el operador de indirección que indica que apunt es un apuntador. En el ejemplo anterior, puede decirse que: *apunt se refiere al objeto apuntado por apunt. apunt es un apuntador a objetos de tipo int Observe que el operador de indirección utiliza el mismo símbolo que el operador de multiplicación. En este caso el asterisco le indica al sistema que se define una variable apuntador. Ejemplos: int *x; char *y; double *r, *s;
x es un apuntador de tipo entero. y es un apuntador de tipo carácter. r y s son apuntadores de tipo real doble precisión.
16
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA CONTENIDO DIDÁCTICO DEL CURSO: 301305 – ESTRUCTURA DE DATOS
Operadores para trabajar apuntadores Los operadores utilizados para trabajar variables apuntadores son el ( * ) asterisco llamado operador de indirección, y el ( & ) ampersand, llamado operador de dirección.
* toma su operando como una dirección de memoria y retorna la información almacenada en ese lugar. & devuelve la dirección de memoria de su operando.
Aplicación práctica del uso de apuntadores Progra1.cpp #include #include void main(void) { int x, y; //Define x, y variables enteras. int *p, *q; //Define p y q variables tipo apuntador. p = &x; //asigna a p la dirección de x. (p apunta a x). q = &y; //asigna a q la dirección de y. (q apunta a y). *p = 10; //almacena en x el valor 10. *q = *p * 2; //almacena en y el valor de x multiplicado por 2 (20). y = y + *p; //a la variable y le suma el valor en x (20+10). cout
View more...
Comments