Laboratorio de Computacion Salas A y B
Profesor(a): Manuel Enrrique Castañeda Castañeda
Asignatura: Estructura de Datos y Algoritmos I
Grupo: 14
No de practica(s): 5
Integrante(s)Alan
: Saúl García González
No de lista o brigada:
Semestre:2024-2
Fecha de entrega:19/03/2024
Observaciones:
Calificacion:
1-almacenar los datos de n cuates e
imprimirlos en pantalla
#include <stdio.h>
CODIGO
#include <stdlib.h>
#include <string.h>
struct cuates {
char nombre[50];
int edad;
float prom;
struct cuates *sig;
};
struct cuates *primercuate = NULL;
struct cuates *ultimocuate = NULL;
void agregar(char nombre[], int edad, float prom);
void mostrar();
void eliminar(char nombre[]);
int main() {
int op;
do {
printf("MENU\n");
printf("1) agregar\n2) mostrar\n3) eliminar\n4) salir\n");
scanf("%i", &op);
switch (op) {
case 1:
{
char nombre[50];
int edad;
float prom;
printf("Ingrese el nombre: ");
scanf("%s", nombre);
printf("Ingrese la edad: ");
scanf("%d", &edad);
printf("Ingrese el promedio: ");
scanf("%f", &prom);
agregar(nombre, edad, prom);
}
break;
case 2:
mostrar();
break;
case 3:
{
char nombre[20];
printf("escriba el nombre del cuate que deseas eliminar: ");
scanf("%s",nombre);
eliminar(nombre);
}
break;
case 4:
printf("ADIOS!!!!!\n");
break;
default:
printf("Opcion no valida, elige otra opcion.\n");
}
} while (op != 4);
return 0;
}
void agregar(char name[], int edad, float prom) {
struct cuates *nuevocuate = (struct cuates *)malloc(sizeof(struct cuates));
if (nuevocuate == NULL) {
printf("No se pudo reservar la memoria.\n");
return;
}
strcpy(nuevocuate->nombre, name);
nuevocuate->edad = edad;
nuevocuate->prom = prom;
nuevocuate->sig = NULL;
if (primercuate == NULL) {
primercuate = nuevocuate;
ultimocuate = nuevocuate;
} else {
ultimocuate->sig = nuevocuate;
ultimocuate = nuevocuate;
}
}
void mostrar() {
struct cuates *temp = primercuate;
while (temp != NULL) {
printf("%s tiene %i anos y su promedio es %.2f\n", temp->nombre, temp->edad, temp->prom);
temp = temp->sig;
}
}
void eliminar(char nombre[]) {
struct cuates *actual = primercuate;
struct cuates *anterior = NULL;
while (actual != NULL && strcmp(actual->nombre, nombre) != 0) {
anterior = actual;
actual = actual->sig;
}
if (actual == primercuate) {
primercuate = primercuate->sig;
} else if (actual != NULL) {
anterior->sig = actual->sig;
} else {
printf("El cuate no se encuentra en la lista.\n");
return;
}
printf("El cuate '%s' ha sido eliminado de la lista.\n", nombre);
free(actual);
}
1-almacenar los datos de n cuates e
imprimirlos en pantalla
EJECUCION
2-almacenar en dos pilas los numeros del 1 al 100 si es
par en una si es impar en otra
CODIGO
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
struct nodo {
int dato;
nodo *sig;
};
nodo *ultpar = NULL;
nodo *ultimpar = NULL;
void agregar(int numero);
void mostrarpares();
void mostrarimpares();
void eliminarpares();
void eliminarimpares();
int main(){
setlocale(LC_ALL,"spanish");
int op;
for (int i = 1; i <= 100; i++) {
agregar(i);
}
do {
printf("¿Qué deseas hacer?\n");
printf("1.-Mostrar números pares\n");
printf("2.-Mostrar números impares\n");
printf("3.-Eliminar elemento par\n");
printf("4.-Eliminar elemento impar\n");
printf("5.-Salir\n");
scanf("%d",&op);
switch (op) {
case 1:
mostrarpares();
break;
case 2:
mostrarimpares();
break;
case 3:
eliminarpares();
break;
case 4:
eliminarimpares();
break;
case 5:
printf("Adiós");
break;
default:
printf("Opción no válida\n");
break;
}
} while (op < 5);
}
void agregar(int numero) {
nodo *nuevo = (nodo*)malloc(sizeof(nodo));
if (nuevo == NULL) {
printf("No se pudo asignar memoria\n");
return;
}
nuevo->dato = numero;
if (numero % 2 == 0) {
nuevo->sig = ultpar;
ultpar = nuevo;
} else {
nuevo->sig = ultimpar;
ultimpar = nuevo;
}
}
void mostrarpares() {
nodo *indice = ultpar;
if (indice == NULL) {
printf("No hay números pares para mostrar\n");
}
printf("Números pares:\n");
while (indice != NULL) {
printf("|%d| ", indice->dato);
indice = indice->sig;
}
printf("\n");
}
void mostrarimpares() {
nodo *indice = ultimpar;
if (indice == NULL) {
printf("No hay números impares para mostrar\n");
}
printf("Números impares:\n");
while (indice != NULL) {
printf("|%d| ", indice->dato);
indice = indice->sig;
}
printf("\n");
}
void eliminarpares() {
if (ultpar == NULL) {
printf("No hay números pares para eliminar\n");
}
nodo *aux = ultpar;
ultpar = ultpar->sig;
free(aux);
printf("Elemento par eliminado correctamente\n");
}
void eliminarimpares() {
if (ultimpar == NULL) {
printf("No hay números impares para eliminar\n");
}
nodo *aux = ultimpar;
ultimpar = ultimpar->sig;
free(aux);
printf("Elemento impar eliminado correctamente\n");
}
2-almacenar en dos pilas los numeros del 1 al
100 si es par en una si es impar en otra
ejecucion
3-implementar una pila y una cola cuando se
elimine una dato de la pila se intgresa a la
cola
#include<stdio.h>
#include<stdlib.h>
CODIGO
#include<locale.h>
struct nodo {
int dato;
nodo *sig;
};
nodo *ultpila = NULL;
nodo *colainicio = NULL;
nodo *colafin = NULL;
void agregar_pila();
void agregar_cola(nodo *nuevo);
void mostrar_pila();
void mostrar_cola();
void eliminar_pila();
void eliminar_cola();
int main() {
setlocale(LC_ALL,"spanish");
int op;
do {
printf("¿Qué deseas hacer?\n");
printf("1.-Agregar a la pila\n");
printf("2.-Mostrar pila\n");
printf("3.-Eliminar de la pila\n");
printf("4.-Mostrar cola\n");
printf("5.-Eliminar cola\n");
printf("6.-Salir\n");
scanf("%d", &op);
switch (op) {
case 1:
agregar_pila();
break;
case 2:
mostrar_pila();
break;
case 3:
eliminar_pila();
break;
case 4:
mostrar_cola();
break;
case 5:
eliminar_cola();
break;
case 6:
printf("Adiós");
break;
default:
printf("Opción no válida\n");
break;
}
} while (op < 6);
}
void agregar_pila() {
nodo *nuevo = (nodo*)malloc(sizeof(nodo));
if (nuevo == NULL) {
printf("No se pudo asignar memoria\n");
}
printf("Ingrese el elemento:\n");
scanf("%d", &nuevo->dato);
nuevo->sig = ultpila;
ultpila = nuevo;
}
void agregar_cola(nodo *nuevo) {
if (colainicio == NULL) {
colainicio = nuevo;
colafin = nuevo;
} else {
colafin->sig = nuevo;
colafin = nuevo;
}
}
void mostrar_pila() {
nodo *indice = ultpila;
if (indice == NULL) {
printf("La pila está vacía\n");
}
printf("Elementos de la pila:\n");
while (indice != NULL) {
printf("|%d|\n", indice->dato);
indice = indice->sig;
}
}
void mostrar_cola() {
nodo *indice = colainicio;
if (indice == NULL) {
printf("La cola está vacía\n");
}
printf("Elementos de la cola:\n");
while (indice != NULL) {
printf("|%d|\n", indice->dato);
indice = indice->sig;
}
}
void eliminar_pila() {
if (ultpila == NULL) {
printf("La pila está vacía\n");
}
nodo *aux = ultpila;
ultpila = ultpila->sig;
aux->sig = NULL;
printf("Elemento eliminado de la pila: %d\n",aux->dato);
agregar_cola(aux);
}
void eliminar_cola() {
if (colainicio == NULL) {
printf("La cola está vacía, no se pueden eliminar elementos.\n");
}
nodo *aux = colainicio;
colainicio = colainicio->sig;
printf("Elemento eliminado correctamente\n");
free(aux);
}
}
3-implementar una pila y una cola cuando
se elimine una dato de la pila se intgresa a
la cola
EJECUCIÓN
OBSERVACIONES
Este tema creo que es un poco abstracto por lo de
de las direcciones de memoria y los apuntadores,
por lo que se me dificulto un poco poder entender
como hacer los codigos.
CONCLUSIONES
En conclusion creo que con la practica se va
haciendo mas claro el tema aunque todavia no
comprenda del todo bien algunas cosas se han
hecho un poco mas comprensibles.