Please enable JavaScript.
Coggle requires JavaScript to display documents.
Manejo de Punteros – Listas - Coggle Diagram
Manejo de Punteros – Listas
Listas Dinámicas con Punteros
Ventajas frente a arreglos
Tamaño dinámico
No requiere mover elementos
Inserción/eliminación más eficiente
Listas dobles y circulares
Dobles
Cada nodo tiene puntero al anterior (prev) y al siguiente (next).
Ciurculares
El último nodo apunta al primero.
Definición y uso de estructuras (struct)
Concepto
Agrupan diferentes tipos de datos bajo un mismo nombre.
Declaración
struct Nodo {
int dato;
struct Nodo *sig;
};
Creación y recorrido de listas enlazadas simples
Concepto
Conjunto de nodos conectados mediante punteros.
Uso
Se enlazan nodos usando punteros.
Recorrido
while (actual != NULL) {
// procesar nodo
actual = actual->sig;
}
Inserción y eliminación de nodos
Inseción
Puede ser al inicio, medio o final.
Eliminación
Se ajustan conexiones y se libera memoria.
Concepto
Se modifican los punteros para agregar o quitar nodos.
Manejo de Punteros
Concepto de punteros y su declaración
Concepto
Un puntero es una variable que almacena la dirección de memoria de otra variable.
Declaración
tipo
nombre;
Ejemplo: int
ptr; → ptr apunta a una dirección de memoria que contiene un entero.
Operadores * y &
Concepto
Son operadores fundamentales para trabajar con punteros.
"*"→ accede al valor almacenado en la dirección apuntada.
"&" → obtiene la dirección de memoria de una variable.
Ejemplo
int x = 10;
int
ptr = &x;
printf("%d",
ptr); // Imprime 10
Arreglos y punteros
Concepto
Los arreglos y punteros están estrechamente relacionados; el nombre de un arreglo es un puntero constante al primer elemento.
Ejemplo
int nums[3] = {1, 2, 3};
int
ptr = nums;
printf("%d",
(ptr + 1)); // Imprime 2
Equivalencio
array[i] ≡ *(array + i)
Punteros a estructuras y funciones
Declaración
Estructura: struct Persona *p;
Función: void (*fptr)(int);
Concepto
Los punteros pueden apuntar a estructuras y funciones, facilitando modularidad y acceso dinámico.
Ejemplo
struct Persona { int edad; };
struct Persona *p = malloc(sizeof(struct Persona));}
p->edad = 25;
Acceso a memoria dinámica
Concepto
Permite reservar memoria en tiempo de ejecución.
Ejemplo
int
arr = (int
)malloc(5 * sizeof(int));
free(arr);
Funciones
malloc(size) → reserva memoria sin inicializar.
calloc(n, size) → reserva e inicializa en cero.
free(ptr) → libera la memoria reservada.
Técnicas de Clasificación (Ordenamiento)
Aplicación en listas y arreglos
Adaptar algoritmos para estructuras dinámicas
Análisis de eficiencia
Complejidad temporal:
Burbuja: O(n²)
QuickSort: O(n log n) promedio
Algoritmos de ordenamiento
Selección (Selection Sort)
Busca el mínimo y lo coloca al inicio
MergeSort
Divide lista y mezcla ordenadamente
Burbuja (Bubble Sort)
Compara e intercambia pares adyacentes
QuickSort
Divide y conquista con pivote
Inserción (Insertion Sort)
Inserta cada elemento en su posición correcta
Técnicas de Búsqueda
Comparación de eficiencias
Binaria: O(log n)
Lineal: O(n)
Búsqueda lineal (secuencial)
Recorre elemento por elemento
Funciona en listas y arreglos
Búsqueda binaria
Solo en estructuras ordenadas
Divide el rango en mitades
Aplicación en listas y arreglos
Listas
Menos eficiente por acceso secuencial
Arreglos
Acceso directo por índice