|
Unidad Profesional Interdisciplinaria
en Ingeniería y Tecnologías
Avanzadas
Alumno
Orozco Rojas Francisco
Unidad de Aprendizaje
Estructura de Datos
Profesor
M. en C. Niels Henrik Navarrete Manzanilla
Práctica 2
Hanoi
Ciudad de México; 19 de septiembre de 2023
ÍNDICE
CONTENIDO
INTRODUCCIÓN 3
DESARROLLO 3
DESCRIPCIÓN 3
ANÁLISIS 3
REQUERIMIENTOS FUNCIONALES 3
REQUERIMIENTOS NO FUNCIONALES 3
DIAGRAMAS 3
CÓDIGO 3
RESULTADOS 3
CONCLUSIONES 3
REFERENCIAS BIBLIOGRÁFICAS 4
Ciudad de México; 19 de septiembre de 2023
INTRODUCCIÓN
DESARROLLO
Código
// Función para eliminar un int main() {
#include <stdio.h>
elemento de la pila int n = 5; // Número de discos
#include <stdlib.h>
int elimele(Pila* pil) { Pila* origen = crearPila(n);
if (pvacia(pil)) { Pila* aux = crearPila(n);
// Definición de la estructura de la pila
typedef struct { printf("Error: la pila está Pila* destino = crearPila(n);
int *arreglo; vacía\n");
int cima; return -1; // Insertar los discos en la varilla
int elemn; } A
} Pila; return pil->arreglo[pil->cima--]; for (int i = n; i >= 1; i--) {
} insertarelem(origen, i);
// Función para crear una pila }
Pila* crearPila(int n) {
// Función para mover un disco de
Pila* pil;
una varilla a otra hanoi(n, origen, aux, destino);
pil = (Pila*)
malloc(sizeof(Pila)); void mover(char desde, char hacia,
pil->elemn = n; int disco) { return 0;
pil->cima = -1; printf("Mover disco %d de la }
pil->arreglo = (int*) malloc(pil- varilla %c a la varilla %c\n", disco,
>elemn * sizeof(int)); desde, hacia);
return pil; }
}
// Función recursiva para resolver
// Función para verificar si la pila está
las Torres de Hanoi
vacía
int pvacia(Pila* pil) { void hanoi(int n, Pila* origen, Pila*
return pil->cima == -1; aux, Pila* destino) {
} if (n == 1) {
int disco;
// Función para verificar si la pila está disco =
llena elimele(origen);
int pllena(Pila* pil) { insertarelem(destino, disco);
return pil->cima == pil->elemn - 1; mover('A', 'C', disco);
}
return;
// Función para insertar un
}
elemento en la pila
hanoi(n-1, origen, destino, aux);
void insertarelem(Pila* pil, int item)
int disco;
{
disco = elimele(origen);
if (pllena(pil)) {
insertarelem(destino, disco);
printf("Error: la pila está
mover('A', 'C', disco);
llena\n");
hanoi(n-1, aux, origen, destino);
return;
}
}
pil->arreglo[++pil->cima] = item; Ciudad de México; 19 de septiembre de 2023
}
Resultado
CONCLUSIONES
REFERENCIAS BIBLIOGRÁFICAS
Ciudad de México; 19 de septiembre de 2023