
Volver al catálogo
2025-02 — ECIN-00416
Estructura de Datos
Ayudantía 11 - Grafos y Representaciones
🔗 Ayudantía: Grafos y Representaciones
📝 Ejercicio 1: Teoría de Grafos
🎯 Descripción
Dado el siguiente grafo dirigido, responda:
- ¿Cuántos vértices y aristas tiene el grafo?
- ¿Existe algún ciclo en el grafo? Si es así, indique uno.
- Realice un recorrido BFS (Breadth-First Search) desde el vértice 0
- Realice un recorrido DFS (Depth-First Search) desde el vértice 0
Visualización del Grafo:


📝 Ejercicio 2: Análisis de Representaciones de Grafos
🎯 Descripción
Una red social quiere optimizar su sistema de almacenamiento de conexiones entre usuarios. Actualmente utilizan una matriz de adyacencia para representar las amistades, pero están considerando cambiar a una lista de adyacencia.
Se te proporciona información de 6 usuarios y sus conexiones. Debes:
-
Analizar la matriz de adyacencia proporcionada y determinar:
- ¿Cuántas amistades tiene cada usuario?
- ¿Cuál es el usuario más popular (más conexiones)?
- ¿Cuál es el usuario menos popular?
- ¿Cuánta memoria ocupa la matriz? (cada elemento ocupa 4 bytes)
-
Convertir a lista de adyacencia y calcular:
- ¿Cuánta memoria ocuparía la lista? (cada puntero ocupa 8 bytes, cada entero 4 bytes)
-
Operaciones sobre el grafo:
- ¿Cuántos amigos en común tienen los usuarios 0 y 3?
- ¿Existe un camino de amistad entre el usuario 0 y el usuario 5? (amigos de amigos)
- Si el usuario 1 quiere enviar un mensaje al usuario 5 a través de amigos, ¿cuál es la cadena más corta?
💡 Ejemplo
Contexto: Red social con 6 usuarios (numerados del 0 al 5)
Matriz de Adyacencia:
0 1 2 3 4 5
0 [ 0 1 1 0 1 0 ]
1 [ 1 0 1 1 0 0 ]
2 [ 1 1 0 0 1 1 ]
3 [ 0 1 0 0 1 1 ]
4 [ 1 0 1 1 0 1 ]
5 [ 0 0 1 1 1 0 ]
Visualización del Grafo:

Información adicional:
- Grafo no dirigido (amistad es bidireccional)
- Si
matriz[i][j] = 1, entonces el usuarioiy el usuariojson amigos - La diagonal principal siempre es 0 (un usuario no es amigo de sí mismo)
📝 Ejercicio 3: Implementación de Conversiones
🎯 Descripción
Implementar dos funciones que conviertan entre las dos representaciones de grafos:
matrizToLista(): Convertir matriz de adyacencia a lista de adyacencialistaToMatriz(): Convertir lista de adyacencia a matriz de adyacencia
Ambas funciones deben funcionar para grafos no dirigidos.
💡 Ejemplos de Uso
Ejemplo 1: Conversión Matriz → Lista
📥 Input:
matriz = [
[0, 1, 1, 0],
[1, 0, 0, 1],
[1, 0, 0, 1],
[0, 1, 1, 0]
]
📤 Output (lista):
[
[1, 2], // Vértice 0 conectado a 1 y 2
[0, 3], // Vértice 1 conectado a 0 y 3
[0, 3], // Vértice 2 conectado a 0 y 3
[1, 2] // Vértice 3 conectado a 1 y 2
]
Ejemplo 2: Conversión Lista → Matriz
📥 Input:
lista = [
[1, 2],
[0, 2],
[0, 1, 3],
[2]
]
n = 4
📤 Output (matriz):
[
[0, 1, 1, 0],
[1, 0, 1, 0],
[1, 1, 0, 1],
[0, 0, 1, 0]
]
Restricciones:
1 <= n <= 1000(número de vértices)- Grafo no dirigido (matriz simétrica)
matriz[i][j] ∈ {0, 1}- No hay aristas múltiples ni lazos (auto-conexiones)
Hints:
- Para
matrizToLista(): Recorrer la matriz y agregar vecinos - Para
listaToMatriz(): Crear matriz de ceros y llenar con unos donde hay aristas
Ayudantía 10 - Binary Tree y Teoría de Grafos
🔗 Ayudantía 10: Binary Tree y Teoría de Grafos
📝 Ejercicio 1: Teoría de árboles
🎯 Descripción
Dado el siguiente árbol binario, responda:
- ¿Cuál es la altura del árbol?
- ¿Cuántos nodos hoja tiene?
- Indique el recorrido preorder
- Indique el recorrido inorder
- Indique el recorrido postorder
- ¿Es un árbol binario de búsqueda (BST)? Justifique.
💡 Ejemplo
50
/ \
30 70
/ \ / \
20 40 60 80
/
10
📝 Ejercicio 2: Teoría de grafos
🎯 Descripción
Suponga una empresa de entregas que debe encontrar la ruta más corta desde el punto A al punto F.
- Liste todos los caminos posibles desde A hasta F
- Calcule la distancia total en KM de cada camino
- Determine cuál es el camino más corto
- ¿Qué algoritmo usaría para encontrar el camino mas corto?
💡 Ejemplo
Grafo (distancias en KM):
A ---8--- B ---7--- C
| | |
4 3 5
| | |
D ---2--- E ---6--- F
| |
10------------------+
Aristas:
A-B: 8 km
A-D: 4 km
B-C: 7 km
B-E: 3 km
C-F: 5 km
D-E: 2 km
D-F: 10 km
E-F: 6 km
📝 Ejercicio 3: Árboles
🎯 Descripción
Generar una función que construya un árbol binario dados los recorridos preorder y inorder.
Los nodos del árbol tienen la siguiente estructura:
Class TreeNode{
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(nullptr), right(nullptr){}
~TreeNode(){}
};
💡 Ejemplo
📥 Input:
preOrder: [5, 3, 2, 4, 8, 7, 9]
inOrder: [2, 3, 4, 5, 7, 8, 9]
📤 Output (árbol construido):
5
/ \
3 8
/ \ / \
2 4 7 9
- Se recomienda utilizar recursividad.
- los recorridos preorder y inorder se entregan en forma de vector
preOrder, vector inOrder.
Ayudantía 9 - Árboles AVL
🔗 Ayudantía 9: Árboles AVL
📝 Ejercicio 1: Secuencia Ascendente
🎯 Descripción
Construya un Árbol AVL insertando elementos en orden ascendente.
Este caso es crítico porque genera desbalances consecutivos hacia la derecha (RR).
Muestre cada rotación necesaria y el factor de equilibrio de cada nodo después de cada inserción.
💡 Ejemplo
📥 Input: [5, 10, 15, 20, 25, 30, 35]
📝 Ejercicio 2: Secuencia Descendente
🎯 Descripción
Inserte los elementos en orden descendente en un Árbol AVL.
Este escenario genera desbalances consecutivos hacia la izquierda (LL).
Identifique todos los puntos donde se requiere rotación y muestre el árbol resultante después de cada rebalanceo.
💡 Ejemplo
📥 Input: [80, 70, 60, 50, 40, 30, 20]
📝 Ejercicio 3: Patrón Zigzag
🎯 Descripción
Construya un Árbol AVL con una secuencia que alterna entre valores grandes y pequeños.
Este patrón genera múltiples rotaciones dobles (LR y RL).
Dibuje el árbol después de cada inserción crítica y especifique el tipo de rotación aplicada.
💡 Ejemplo
📥 Input: [50, 25, 75, 10, 60, 90, 5, 70]
📝 Ejercicio 4: Eliminación con Rebalanceo en Cascada
🎯 Descripción
Construya un Árbol AVL con los elementos dados y luego elimine nodos específicos.
La eliminación puede causar rebalanceos en cascada (múltiples rotaciones en diferentes niveles).
Muestre el árbol después de cada eliminación y todas las rotaciones necesarias.
💡 Ejemplo
📥 Input: [50, 25, 75, 10, 30, 60, 80, 5, 15, 27, 35, 55, 65, 77, 85]
Números a eliminar: [10, 30, 60]
📝 Ejercicio 5: Rango de Eliminación
🎯 Descripción
Construya un Árbol AVL con los elementos dados.
Luego, elimine todos los nodos cuyo valor esté dentro de un rango específico [a, b].
Muestre el árbol después de cada eliminación y los rebalanceos en cascada.
💡 Ejemplo
📥 Input: [50, 30, 70, 20, 40, 60, 80, 10, 25, 35, 45, 55, 65, 75, 90]
Eliminar rango: [35, 65]
📝 Ejercicio 6: Desafío Extra (Operaciones Mixtas)
🎯 Descripción
Realice una secuencia compleja de operaciones: inserciones y eliminaciones.
Mantenga el árbol balanceado en todo momento y registre cada rotación realizada.
Al final, calcule la altura del árbol y verifique que cumple la propiedad AVL.
💡 Ejemplo
📥 Operaciones:
1. Insertar: [45, 25, 65, 15, 35, 55, 75, 10, 30, 50, 60, 70, 80]
2. Eliminar: [15, 65]
3. Insertar: [5, 20, 40]
4. Eliminar: [25, 75]
5. Insertar: [85, 12]
✅ Resultado:
- Total de rotaciones: ___
- Altura final: ___
- Factor de equilibrio de la raíz: ___
🔧 Herramientas de Apoyo
Visualizador Interactivo de Árboles AVL
Para verificar paso a paso las inserciones, eliminaciones y rotaciones, pueden utilizar:
🔗 AVL Tree Visualization
https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
Esta herramienta permite:
- Insertar y eliminar nodos uno por uno
- Visualizar las rotaciones en tiempo real
- Verificar los factores de equilibrio de cada nodo
- Comparar sus resultados con la solución correcta
Ayudantía 8 - Árboles AVL
🔗 Ayudantía 8: Árboles AVL
📝 Ejercicio 1: Rotaciones Simples (LL y RR)
🎯 Descripción
Dado un conjunto de números, construya un Árbol AVL insertando los elementos uno por uno.
Observe los casos donde el árbol se desbalancea y se requiere una rotación simple (LL o RR) para equilibrarlo.
💡 Ejemplo
📥 Input: [30, 20, 10]
📝 Ejercicio 2: Rotaciones Dobles (LR y RL)
🎯 Descripción
Inserte los elementos en el orden dado y observe los casos donde se requiere una rotación doble (LR o RL).
Muestre los pasos y el árbol antes y después de la rotación.
💡 Ejemplo
📥 Input: [50, 30, 40]
📝 Ejercicio 3: Construcción de Árbol AVL Completo
🎯 Descripción
Dado un arreglo de enteros, construya un Árbol Binario de Búsqueda Balanceado (AVL) insertando los elementos uno por uno.
Después de cada inserción, calcule los factores de equilibrio y aplique las rotaciones necesarias.
💡 Ejemplo
📥 Input: [10, 20, 30, 25, 5, 35, 40, 15, 38]
📝 Ejercicio 4: Inserciones y Eliminaciones
🎯 Descripción
Construya un Árbol AVL insertando y luego eliminando elementos.
Después de cada operación, muestre el árbol y los reequilibrios que ocurran.
💡 Ejemplo
📥 Input: [10, 20, 30, 25, 5, 35, 40, 15, 38]
Números a eliminar: [10, 35, 20]
📝 Ejercicio 5: Desafío (Mixto)
🎯 Descripción
Inserte los números y realice las rotaciones necesarias para mantener el árbol AVL balanceado.
Después, elimine algunos nodos y reequilibre el árbol.
Dibuje el resultado final y anote las rotaciones realizadas.
💡 Ejemplo
📥 Input: [50, 30, 70, 20, 40, 60, 80, 10, 25, 35, 45]
Eliminar: [20, 35, 70]
✅ Árbol final balanceado:
40
/ \
25 60
/ \ / \
10 30 50 80
Ayudantía 7 - Heapsort
🔗 Ayudantía 7: Heapsort
📝 Ejercicio 1: MaxHeap
🎯 Descripción
Dado un arreglo de enteros, la tarea es ordenarlo utilizando el algoritmo Heapsort (Max Heap), mostrando el paso a paso.
💡 Ejemplo
📥 Input: [47, 46, 21, 44, 30, 10, 24, 7, 42, 34]
📤 Output:
H1: 47, 46, 21, 44, 30, 10, 24
H2: 47, 46, 21, 44, 30, 10, 21, 7, 42, 34
H3: 47, 46, 24, 44, 34, 10, 21, 7, 42, 30
1. [30, 46, 24, 44, 34, 10, 21, 7, 42| 47]
H1: [46, 30, 24, 44, 34, 10, 21, 7, 42| 47]
H2: [46, 44, 24, 30, 34, 10, 21, 7, 42| 47]
H3: [46, 44, 24, 42, 34, 10, 21, 7, 30| 47]
2. [30, 44, 24, 42, 34, 10, 21, 7| 46, 47]
H1: [44, 30, 24, 42, 34, 10, 21, 7| 46, 47]
.
.
.
X. [7, 10, 21, 24, 30, 34, 42, 44, 46, 47]
📝 Ejercicio 2: MinHeap
🎯 Descripción
Dado un arreglo de enteros, la tarea es ordenarlo utilizando el algoritmo Heapsort (Min Heap), mostrando el paso a paso.
💡 Ejemplo
📥 Input: [12, 4, 19, 8, 5, 21, 7]
📤 Output:
H1: 12, 4
H2: 4, 12, 19, 8
.
.
1. [19, 5, 7, 12, 8, 21| 4]
H1: [5, 19, 7, 12, 8, 21| 4]
.
.
.
X. [21, 19, 12, 8, 7, 5, 4]
Ayudantía 6 - Múltiples ejercicios
🔗 Ayudantía 6:
📝 Opción 1: Repaso Listas Enlazadas
🎯 Descripción
Dadas dos listas ordenadas en orden creciente, cree y devuelva una nueva lista que represente la intersección de las dos listas. La nueva lista debe hacerse con su propia memoria, las listas originales no deben cambiarse.
💡 Ejemplo
📥 Input:
Lista 1: 1->2->3->4->6
Lista 2: 2->4->6->8
📤 Output: 2->4->6
📝 Opción 2: Resolución Ejercicio 4 Prueba (Stacks)
🎯 Descripción
Dadas dos secuencias de valores numéricos almacenadas en arreglos
pushed y popped de tamaño n, determina si es posible obtener la secuencia popped aplicando operaciones Push (inserción) y Pop (eliminación) sobre una pila vacía, utilizando los valores del arreglo pushed en orden.Implementa la función:
bool canBeObtainable(int* pushed, int* popped, int size)
Restricciones:
- Complejidad temporal: O(n)
- Complejidad espacial: O(n)
- Usar clase
Node - Solo librería
<iostream>
💡 Ejemplo
📥 Input:
pushed = [1, 2, 3, 4, 5]
popped = [4, 5, 3, 2, 1]
📤 Output: true
📝 Opción 3: Materia nueva
🎯 Descripción
Dada una lista enlazada, y dos índices m y n, y un entero k que define los subgrupos que hay que rotar, rota la sublista desde la posición m hasta la n (inclusive) k posiciones hacia la derecha dentro de la lista original, sin usar espacio adicional significativo y reocrriendo la lista solo una vez.
💡 Ejemplo
Dado el siguiente arbol, hacer los recorridos NLR, LNR, LRN y BFS
F
/ \
B G
/ \ \
A D I
/ \ /
C E H
class Node {
public:
int value;
Node* next;
Node() { next = nullptr; }
};
Ayudantía 5 - Stacks y Queues
🔗 Ayudantía 5: Stacks y Queues
📝 Ejercicio 1: Ordenamiento de stack
🎯 Descripción
Dada una pila de enteros. Ordene la pila en orden descendete (el elemento más grande en la parte inferior y el más pequeño en la parte superior).
💡 Ejemplo
📥 Input:
Stack: 11, 2, 32, 3, 41
📤 Output: 2, 3, 11, 32, 41
📝 Ejercicio 2: Ordenamiento de stack
🎯 Descripción
Dada una cola q que contiene elementos enteros, su tarea es invertir la cola.
💡 Ejemplo
📥 Input:
Queue: 4 3 1 10 2 6
📤 Output: 6 2 10 1 3 4
Ayudantía 4.5 - Listas Enlazadas (Tipo prueba)
🔗 Ayudantía 5.5: Listas Enlazadas (Tipo prueba)
📝 Ejercicio 1: Suma de listas
🎯 Descripción
Se te da dos números representados como listas enlazadas, donde cada nodo contiene un solo dígito. Los dígitos están almacenados en orden inverso, de manera que las unidades están en el primer nodo. Escribe un programa para sumar estos dos números y devolver el resultado
como una lista enlazada.
💡 Ejemplo
📥 Input:
Lista 1: 2 -> 4 -> 3 (Representa 342)
Lista 2: 5 -> 6 -> 4 (Representa 465)
📤 Output: Resultado: 7 -> 0 -> 8 (Representa 807)
📝 Ejercicio 2: Rotar una Lista Enlazada en rango en subgrupos
🎯 Descripción
Dada una lista enlazada, y dos índices m y n, y un entero k que define los subgrupos que hay que rotar, rota la sublista desde la posición m hasta la n (inclusive) k posiciones hacia la derecha dentro de la lista original, sin usar espacio adicional significativo y reocrriendo la lista solo una vez.
💡 Ejemplo
📥 Input:
Lista: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> Null
m = 3, n = 6, k = 2
📤 Output: 1 -> 2 -> 5 -> 6 -> 3 -> 4 -> 7 -> 8 -> Null
Ayudantía 4 - Doble Linked List Circular
🔗 Ayudantía 4: Doble Linked List Circular
📋 Estructura de un Nodo
class Node {
public:
int data;
Node *next;
Node *prev;
Node(int x) {
data = x;
next = this; // se apunta a sí mismo
prev = this;
}
};
📝 Ejercicio 1: Rotación de una Lista Doblemente Enlazada Circular
🎯 Descripción
Dada una lista enlazada doble circular y un entero k, la tarea es realizar una rotación hacia la derecha de la lista en k posiciones.
💡 Ejemplo
📥 Input:
Linked List: 10 ⇄ 20 ⇄ 30 ⇄ 40 ⇄ 50
k = 2
📤 Output: 40 ⇄ 50 ⇄ 10 ⇄ 20 ⇄ 30
⚠️ Consideraciones
- ✅ Una rotación hacia la derecha significa que cada elemento se mueve k posiciones hacia adelante en la lista.
- ✅ La lista es circular, por lo que los últimos elementos deben moverse al inicio sin necesidad de reconstruir la lista.
- ✅ El algoritmo debe aprovechar la naturaleza circular de la lista y no usar arreglos auxiliares.
📝 Ejercicio 2: Invertir una Lista Doblemente Enlazada Circular en grupos
🎯 Descripción
Dada una lista enlazada doble circular y un entero k, la tarea es invertir cada grupo de k nodos en la lista. Si el número de nodos no es multiplo de k, entonces los nodos omitidos, al final, deben considerarse como un grupo y deben invertirse.
💡 Ejemplo
📥 Input:
Linked List: 1 ⇄ 2 ⇄ 3 ⇄ 4 ⇄ 5 ⇄ 6
k = 2
📤 Output: 2 ⇄ 1 ⇄ 4 ⇄ 3 ⇄ 6 ⇄ 5
📥 Input:
Linked List: 1 ⇄ 2 ⇄ 3 ⇄ 4 ⇄ 5 ⇄ 6
k = 4
📤 Output: 4 ⇄ 3 ⇄ 2 ⇄ 1 ⇄ 6 ⇄ 5
⚠️ Consideraciones
- ✅ Una rotación hacia la derecha significa que cada elemento se mueve k posiciones hacia adelante en la lista.
- ✅ La lista es circular, por lo que los últimos elementos deben moverse al inicio sin necesidad de reconstruir la lista.
- ✅ El algoritmo debe aprovechar la naturaleza circular de la lista y no usar arreglos auxiliares.
Ayudantía 3 - Simple Linked List
🔗 Ayudantía 3: Simple Linked List
📋 Estructura de un Nodo
struct Node{
int data;
Node* next;
Node(int x){
data = x;
next = NULL;
}
};
📝 Ejercicio 1: Omitir y Eliminar Nodos
🎯 Descripción
Dada una lista enlazada y dos enteros m y n, la tarea es recorrer la lista enlazada de modo que se omitan m nodos, luego se eliminen los n nodos siguientes y continúen igual hasta el final de la lista enlazada.
💡 Ejemplo
📥 Input:
Linked List: 9→1→3→5→9→4→10→1
n = 1, m = 2
📤 Output: 9→1→5→9→10→1
⚠️ Restricciones
- ✅ El tamaño de la linked list va desde 1-1000
- ✅ n siempre será mayor a 0
- ✅ m siempre será menor o igual al tamaño de la lista
🔄 Ejercicio 2: Fusionar Listas Enlazadas Ordenadas
🎯 Descripción
Dada una lista arr[] de n listas enlazadas ordenadas de diferentes tamaños. Su tarea es fusionar todas estas listas en una sola lista enlazada ordenada y devolver el encabezado de la lista combinada.
💡 Ejemplo
📥 INPUT:
┌─ Lista 1: 1 → 3 → 7 → nullptr
├─ Lista 2: 2 → 4 → 8 → nullptr
└─ Lista 3: 9 → nullptr
📤 OUTPUT: 1 → 2 → 3 → 4 → 7 → 8 → 9 → nullptr
📚 Estructura de Datos
Ayudantía 2: Simple Linked List
Ayudantía 2: Simple Linked List
Estructura de un nodo
struct Node{
int data;
Node* next;
Node(int x){
data = x;
next = NULL;
}
};
Ejercicio 1
Dado el siguiente código, indicar que es lo que va sucediendo línea por línea, y cómo se comportan las variables en cada iteración.
Código
Node *removeDuplicates(Node *head) {
if(head == nullptr) return nullptr;
if(head -> next == nullptr) return head;
vector<int> numbers;
Node* current = head;
Node* prev = nullptr;
while(current != nullptr){
if(find(numbers, current -> data)){
prev->next = current->next;
delete current;
current = prev->next;
} else{
prev = current;
current = current -> next;
}
}
return head;
}
bool find(vector<int>& numbers, int number){
bool found = false;
for(int i = 0; i < numbers.size(); i++){
if(numbers[i] == number){
found = true;
break;
}
}
if(!found){
numbers.push_back(number);
}
return found;
}
Input
5 2 2 4 8 7 9 6 4 3 2 5 8 4 9 8 2 2 5 6 3 7 1 5 8Ejemplo de respuesta
| Paso | current->data | Vector numbers | find() retorna | Acción | prev->data | Estado Lista |
|---|---|---|---|---|---|---|
| Inicial | 5 | [] | - | Inicialización | nullptr | 5→2→2→4→8→7→9→6→4→3→2→5→8→4→9→8→2→2→5→6→3→7→1→5→8 |
| 1 | 5 | [5] | false | Avanzar (único) | 5 | 5→2→2→4→8→7→9→6→4→3→2→5→8→4→9→8→2→2→5→6→3→7→1→5→8 |
| 3 | 2 | [5,2] | true | Eliminar duplicado | 2 | 5→2→𝟐̸→4→8→7→9→6→4→3→2→5→8→4→9→8→2→2→5→6→3→7→1→5→8 |
Ejercicio 2
Dado el siguiente código, indicar que es lo que va sucediendo línea por línea, y cómo se comportan las variables en cada iteración.
Código
long long multiplyTwoLists(Node *first, Node *second) {
if(first == nullptr || second == nullptr) {
return 0;
}
long long firstNumber = convertToNumber(first);
long long secondNumber = convertToNumber(second);
return (firstNumber * secondNumber);
}
long long convertToNumber(Node* head) {
long long num = 0;
while (head != nullptr) {
num = (num * 10 + head->data);
head = head->next;
}
return num;
}
Input
1->2->5
2->3Ejemplo de respuesta
-
Ejecución principal
| Paso | Variable | Valor | Descripción |
|---|---|---|---|
| 1 | first | ptr -> 1->2->5 | Puntero a primera lista |
| 4 | Llamada | convertToNumber(first) | Convierte primera lista |
-
Detalle - convertToNumber(first) → Lista: 1→2→5
| Paso | head -> data | num | Cálculo completo | Resultado |
|---|---|---|---|---|
| 1 | 1 | 0 | (0 × 10) + 1 = 0 + 1 | 1 |
-
Paso a Paso Detallado - Primera Lista
| Iteración | head -> data | num (antes) | Operación | num (después) | head (siguiente) |
|---|---|---|---|---|---|
| Inicial | - | 0 | Inicialización | 0 | ptr → 1→2→5 |
| 1 | 1 | 0 | 0 * 10 + 1 | 1 | ptr → 2→5 |
Ayudantía 1 - Punteros y referencias
Ayudantía 1: Punteros y referencias
- Variable normal: int x = 10;
- Dirección de memoria (señala la posición de la memoria donde se encuentra una variable): &x
- Puntero (Variable que almacena una dirección de memoria): int* ptr = &x;
- Referencia (permite acceder al valor guardado dentro de una dirección de memoria): int& ref = x;
Ejercicio
Cree un programa que:
- Pida al usuario 3 números enteros.
- Guarde esos números en un arreglo.
- Use un puntero para recorrer el arreglo y mostrar los valores junto a sus direcciones de memoria.
- Cree una referencia hacia el primero número del arreglo y modifiquelo mediante la referencia.
- Recorra nuevamente el arreglo mostrando los valores y direcciones de memoria.
Extra
- Use la librería
vectorpara crear un array. - Con el método
push_backpuede insertar elementos al arreglo.
Ejemplo de salida.
Ingrese su número 1: 5
Ingrese su número 2: 9
Ingrese su número 3: 12
Array original
Pos 0 -> Valor: 5 dirección: 0x6381eac76ad0
Pos 1 -> Valor: 9 dirección: 0x6381eac76ad4
Pos 2 -> Valor: 12 dirección: 0x6381eac76ad8
Array modificado
Pos 0 -> Valor: 14 dirección: 0x6381eac76ad0
Pos 1 -> Valor: 9 dirección: 0x6381eac76ad4
Pos 2 -> Valor: 12 dirección: 0x6381eac76ad8