Nothing Special   »   [go: up one dir, main page]

CarlosPatricioBatidasAndi Taller2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

ACTIVIDAD DE TRABAJO AUTÓNOMO

Datos generales
Nombre Docente Carlos Guerrero Valarezo
Asignatura Arquitectura de datos Unidad No. 1
Unidad Pilas y Colas Actividad No. 1
Tipo de actividad de trabajo autónomo
Ejercicios de Análisis de
Taller X Investigación X
práctica caso
Control de
Ensayo Exposición Resumen
lectura
Ejercicios de
Artículo Proyecto Análisis de datos
aplicación

Datos de la actividad
Objetivo: Experimentar con el uso de listas encadenadas para la implementación de
pilas y colas en lenguaje C.
Tema de la actividad:
- Pilas
- Colas
Descripción:
- Definir una pila de enteros son sus operaciones básicas.
- Definir una cola de enteros con las operaciones básicas.
Orientaciones metodológicas:
Leer el material didáctico y aplicarlo en los ejercicios prácticos.
Orientaciones prácticas (consideraciones y pasos a seguir para entregar la
actividad):
• Formato: Texto.-Código en lenguaje C
• Fecha máxima de entrega: detallada en la Ruta de Aprendizaje
• Nombre del archivo: nombreyapellidodelalumno-Pila.c
nombreyapellidodelalumno-Cola.c
• Extensión mínima: Dos archivos.
• Otros: El primer archivo debe contener: los algoritmos con la declaración de
las estructuras necesarias para definir una pila de enteros basada en listas
encadenadas, la función para agregar datos a la pila y la función para obtener
los datos de la pila, la función para imprimir los elementos de la pila, la función
que libere la memoria utilizada por la pila y el programa que llame a las
funciones anteriores comprobando su funcionamiento con los datos
sugeridos. El segundo archivo debe contener: los algoritmos con la declaración
de las estructuras necesarias para definir una cola de enteros basada en listas
encadenadas, la función que agregue datos a la cola, la función que obtenga
datos de la cola, una función que imprima el contenido de la cola, la función
que libere la memoria utilizada por la cola, y un programa que integre las
funciones anteriores mediante los datos sugeridos.
EJERCICIOS

1. Definir una estructura para representar una pila de enteros basada en


listas encadenadas y las operaciones push, pop e imprimir.- Realizar un
programa que permita el ingreso de los números enteros mostrados a
continuación hacia la pila, que imprima el contenido de la pila, luego que
extraiga e imprima cada elemento almacenado en la pila hasta dejarla
vacia.
Datos:
22 2 47 72 88 35

#include <stdio.h>
#include <stdlib.h>

// Definición de la estructura Nodo


struct Nodo {
int valor;
struct Nodo* siguiente;
};

typedef struct Nodo Nodo;

// Definición de la estructura Pila


struct Pila {
Nodo* tope;
};

typedef struct Pila Pila;

// Función para crear un nuevo nodo


Nodo* crearNodo(int valor) {
Nodo* nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
nuevoNodo->valor = valor;
nuevoNodo->siguiente = NULL;
return nuevoNodo;
}

// Función para inicializar una pila vacía


Pila* inicializarPila() {
Pila* pila = (Pila*)malloc(sizeof(Pila));
pila->tope = NULL;
return pila;
}

// Función para verificar si la pila está vacía


int estaVacia(Pila* pila) {
return pila->tope == NULL;
}

// Función para insertar un elemento en la pila (push)


void push(Pila* pila, int valor) {
Nodo* nuevoNodo = crearNodo(valor);
nuevoNodo->siguiente = pila->tope;
pila->tope = nuevoNodo;
}

// Función para eliminar el elemento superior de la pila (pop)


int pop(Pila* pila) {
if (estaVacia(pila)) {
printf("La pila está vacía.\n");
return -1;
}
int valor = pila->tope->valor;
Nodo* temp = pila->tope;
pila->tope = pila->tope->siguiente;
free(temp);
return valor;
}

// Función para imprimir el contenido de la pila


void imprimir(Pila* pila) {
if (estaVacia(pila)) {
printf("La pila está vacía.\n");
return;
}
Nodo* actual = pila->tope;
printf("Contenido de la pila: ");
while (actual != NULL) {
printf("%d ", actual->valor);
actual = actual->siguiente;
}
printf("\n");
}

int main() {
Pila* pila = inicializarPila();
int opcion, numero;

do {
printf("\nMenú:\n");
printf("1. Agregar número\n");
printf("2. Imprimir pila\n");
printf("3. Extraer y mostrar elemento\n");
printf("4. Salir\n");
printf("Seleccione una opción: ");
scanf("%d", &opcion);

switch (opcion) {
case 1:
printf("Ingrese el número a agregar: ");
scanf("%d", &numero);
push(pila, numero);
printf("Número agregado a la pila.\n");
break;
case 2:
imprimir(pila);
break;
case 3:
if (!estaVacia(pila)) {
numero = pop(pila);
printf("Elemento extraído: %d\n", numero);
}
break;
case 4:
printf("Saliendo del programa.\n");
break;
default:
printf("Opción inválida. Por favor, seleccione una opción
válida.\n");
}
} while (opcion != 4);

// Liberar memoria asignada a la pila


Nodo* actual = pila->tope;
while (actual != NULL) {
Nodo* siguiente = actual->siguiente;
free(actual);
actual = siguiente;
}
free(pila);

return 0;
}

2. Definir una estructura para representar una cola basada en listas


encadenadas donde se almacenen números enteros y las operaciones para
agregar, obtener e imprimir .- Realizar un programa que permita el ingreso
de los números enteros mostrados a continuación hacia la cola, que
imprima el contenido de la cola en pantalla y que extraiga e imprima cada
elemento de la cola hasta dejarla vacía.
Datos
22 2 47 72 88 35

#include <stdio.h>
#include <stdlib.h>
// Definición de la estructura Nodo
struct Nodo {
int valor;
struct Nodo* siguiente;
};

typedef struct Nodo Nodo;

// Definición de la estructura Cola


struct Cola {
Nodo* primero;
Nodo* ultimo;
};

typedef struct Cola Cola;

// Función para crear un nuevo nodo


Nodo* crearNodo(int valor) {
Nodo* nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
nuevoNodo->valor = valor;
nuevoNodo->siguiente = NULL;
return nuevoNodo;
}

// Función para inicializar una cola vacía


Cola* inicializarCola() {
Cola* cola = (Cola*)malloc(sizeof(Cola));
cola->primero = NULL;
cola->ultimo = NULL;
return cola;
}

// Función para verificar si la cola está vacía


int estaVacia(Cola* cola) {
return cola->primero == NULL;
}

// Función para agregar un elemento a la cola


void agregar(Cola* cola, int valor) {
Nodo* nuevoNodo = crearNodo(valor);
if (estaVacia(cola)) {
cola->primero = nuevoNodo;
} else {
cola->ultimo->siguiente = nuevoNodo;
}
cola->ultimo = nuevoNodo;
}

// Función para obtener y eliminar el primer elemento de la cola


int obtener(Cola* cola) {
if (estaVacia(cola)) {
printf("La cola está vacía.\n");
return -1;
}
int valor = cola->primero->valor;
Nodo* temp = cola->primero;
cola->primero = cola->primero->siguiente;
free(temp);
if (cola->primero == NULL) {
cola->ultimo = NULL;
}
return valor;
}

// Función para imprimir el contenido de la cola


void imprimir(Cola* cola) {
if (estaVacia(cola)) {
printf("La cola está vacía.\n");
return;
}
Nodo* actual = cola->primero;
printf("Contenido de la cola: ");
while (actual != NULL) {
printf("%d ", actual->valor);
actual = actual->siguiente;
}
printf("\n");
}

int main() {
Cola* cola = inicializarCola();
int opcion, numero;

do {
printf("\nMenú:\n");
printf("1. Agregar número\n");
printf("2. Imprimir cola\n");
printf("3. Extraer y mostrar elemento\n");
printf("4. Salir\n");
printf("Seleccione una opción: ");
scanf("%d", &opcion);

switch (opcion) {
case 1:
printf("Ingrese el número a agregar: ");
scanf("%d", &numero);
agregar(cola, numero);
printf("Número agregado a la cola.\n");
break;
case 2:
imprimir(cola);
break;
case 3:
if (!estaVacia(cola)) {
numero = obtener(cola);
printf("Elemento extraído: %d\n", numero);
}
break;
case 4:
printf("Saliendo del programa.\n");
break;
default:
printf("Opción inválida. Por favor, seleccione una opción válida.\n");
}
} while (opcion != 4);

// Liberar la memoria asignada a la cola


Nodo* actual = cola->primero;
while (actual != NULL) {
Nodo* siguiente = actual->siguiente;
free(actual);
actual = siguiente;
}
free(cola);

return 0;
}

También podría gustarte