Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ciencias
Escuela de Computación
Algoritmos y Programación
También llamado apuntador, referencia, puntero o pointer. Un tipo pointer no es más que un tipo de
dato elemental que representa una dirección de memoria en donde por lo general se encuentra un
dato, sea simple o compuesto. Los apuntadores son la base para la creación de la mayoría de las
estructuras dinámicas.
Operador new
Este operador reserva el espacio en memoria suficiente para el tipo de dato especificado como
parámetro y retorna la dirección de memoria que hace referencia a dicho espacio. Si no se logró
reservar el espacio entonces retorna NULL. Unos ejemplos de su sintaxis se muestra a continuación
Arreglos dinámicos
Entre las ventajas en la creación de memoria de forma dinámica está la de reservar espacio para n
componentes de un mismo tipo de dato. De esta forma, es posible construir un conjunto de datos de
un mismo tipo como un arreglo. El siguiente código permite crear un arreglo de forma estática y
dinámica.
float arr[67];
arr[5] = 6;
float *pArr = new float [67];
*(pArr + 5) = 6.5f; // es equivalente a utilizar pArray[5] = 6.5
Se puede observar que para el caso del apuntador pArr, dado que es una dirección de memoria, se
puede aplicar la operación de suma a la dirección base de dicho arreglo en 5 posiciones. El resultado
es equivalente a aplicar pArr[5], la cual representa una forma más simple de utilizarla. Dada que la
posición del apuntador se encuentra en la primera posición de los datos (que están contiguos en
memoria) es posible asignarle un valor a la primera posición de la siguiente forma:
*(pArr) = 1.5f;
La diferencia entre arr y pArr, una definida en tiempo de compilación y la otra en ejecución
respectivamente, se debe tomar en cuenta que el espacio solicitado dinámicamente por pArr debe
ser liberado.
Matrices dinámicas
Un ejemplo para la construcción de una matriz dinámica de m×n posiciones donde primero se debe
construir un arreglo de m posiciones que contenga apuntadores del tipo base del arreglo. Luego, cada
posición almacenará una fila completa del arreglo bidimensional. En este punto, n indica el número de
columnas en cada fila del arreglo.
int m, n, **matrix, i;
m = 4; n = 6;
matrix = new int *[m];
for(i = 0; i < m; i++)
matrix[i] = new int[n];
pMatrix[0][4] = 6;
*(*(pMatrix + 2)) = 3;
*((*pMatrix) + 2) = 4;
Como se observa, se aloja memoria los apuntadores a las filas para luego, crear dichas filas de forma
dinámica del tamaño de las columnas. Ahora, el proceso para liberar dicha memoria consiste en
liberar el espacio de cada fila completa y luego a los punteros de dichas filas.
Algoritmos de Búsqueda
● Un número entero que indique la posición o índice donde está el elemento en el arreglo. Si no
existe devuelve -1 o cualquier valor fuera del intervalo definido para el arreglo.
● Un número entero, que indique la cantidad de veces que se encuentra el elemento buscado (0
o más repeticiones), devuelve cero (0) si el elemento no existe.
Búsqueda Lineal
Consiste en comparar de manera secuencial, cada elemento del arreglo con el elemento clave (o
buscado). Es eficiente cuando el arreglo es pequeño y no necesariamente está ordenado.
Adaptar el algoritmo de Búsqueda Secuencial para indicar cuántas veces se encuentra una nota X
dada por el usuario, dentro de un arreglo unidimensional llamado Notas con 48 valores de tipo real.
Búsqueda Binaria
Algoritmo de búsqueda que se emplea de manera eficiente cuando se tiene un arreglo muy grande, y
está ordenado.
Pasos:
● Verificar el valor clave (elemento a buscar) contra el elemento que está justo en el centro del
arreglo.
● Si es mayor, el algoritmo buscará solo en la mitad superior del arreglo, si es menor buscará en
la mitad inferior, si es igual retorna la posición encontrada.
● Si busca en alguna de las mitades del arreglo, el algoritmo aplicará nuevamente los pasos a y
b, y así sucesivamente hasta que la clave sea igual al elemento que está justo en la mitad del
subarreglo, ó, el subarreglo se convierta en un arreglo de 1 elemento el cual es distinto a la
clave o elemento buscado.
Ejercicio
Utilice el método de Búsqueda Binaria para recorrer un arreglo arr que almacena 100 elementos de
tipo entero e indicar la primera posición en que se encuentra un elemento elem suministrado por el
usuario. De no encontrarse en el arreglo se retorna (-1).
El ordenamiento es una de las tareas que se efectúa con más frecuencia cuando se desarrollan
programas de tratamiento de información estructurada. Sin embargo, esta tarea puede llegar a
consumir mucho tiempo de ejecución. Por esta razón, muchos investigadores de la computación han
desarrollado cientos de algoritmos de ordenamiento que buscan hacer más eficiente el proceso.
● Buscar el menor entre todos los elementos restantes (2, 3, 4, … ,N). Si el elemento encontrado
es menor que el primero, se intercambian.
● Compararlo con los N-2 restantes (3, 4, … ,N) e intercambiar cuando se encuentre uno menor.
Pasos a seguir:
● Repetir el proceso hasta que no haya más intercambios (se controla con un ciclo que va
desde I = 0 hasta N – 1).