Manejo de listas lenguaje C

4

Click here to load reader

description

Manejo Dinamico De Memoria, ejercicio comentado

Transcript of Manejo de listas lenguaje C

Page 1: Manejo de listas lenguaje C

// Programa para ayudar a Yasmin a entender el lenguaje C/C++

#include <stdio.h> //Se incluye la libreria de input/output para entrada y salida de textos generalmente#include <stdlib.h> //Se incluye la libreria de funciones de C/C++ como free,delete,srand,atof,atoi ,etc #include <string.h> //Inclute la libreria de strings

struct persona { //Comenzaremos creando un registro de una persona, va con el nombre struct y {} char nombre[10]; //Char para leer caracteres el [10] significa que maximo leo 10 caracteres int dia_nac; int mes_nac; int ano_nac; int valor; persona *sig; //Apunta al registro con la variable 'sig' para moverse por los nodos

}; //Aqui termina el registro

void RegistrarPersona (persona **p, int x){ //Esta sera la funcion 'Insertar' . En los parametros pasamos persona que apunta a p (por referencia) y la variable x int i; for (i=1; i <=x; i++){ //El for que leera la cantidad de nodos que se crearan, a partir de ahi se introduce todos los datos persona *t = new persona; //Creamos la variable que crea los nodos donde ira la informacion de la persona, se utiliza el comando new printf ("\n Registro Numero:%d", i); // Esto aparecera luego como Registro 1 Registro 2 Registro 3 .... printf ("\nNombre de la persona:"); scanf ("%s", t->nombre); //Leemos '%s' un string y pasamos la variable auxiliar -> a nombre, esto lee el nombre fflush (stdin); //Libera la memoria embasurada, recomendado hacer despues de cada scanf printf ("\nDia de nacimiento:"); scanf ("%d", &t->dia_nac); //Leemos un entero y pasamos con auxiliar -> a dia fflush (stdin); printf("\nMes de nacimiento:"); scanf ("%d", &t->mes_nac); // Leemos un entero y pasamos con auxiliar -> a mes fflush (stdin); printf ("\nAno nacimiento:"); scanf ("%d", &t->ano_nac); //Leemos un entero y pasamos con auxiliar -> a ano fflush (stdin); t->sig= (*p); //Esta variable que apunta a la cabeza del nodo, cuando se pasa con -> sig ahora se movera al siguiente nodo, p tiene que ir (*p) porque es por referencia (*p)=t; // Ahora p sera igual a t }

};

void MostrarPersona (persona *p){ //Solo pasaremos en este parametro a persona que apunta a p

Page 2: Manejo de listas lenguaje C

struct persona *t = p; //Aqui utilizamos el struct para poder mostrar lo que esta contenido dentro de los nodos printf ("\nMostrar personas:\n"); while (t){ //Mientras exista t o un nodo printf ("\nNombre:%s", t->nombre); //Imprimimos el nombre con t-> nombre printf ("\nDia:%d",t->dia_nac); printf ("\nMes:%d", t->mes_nac); printf ("\nAno:%d\n\n",t->ano_nac); t= t->sig;

} if (!t){ printf ("NULL");

}};

persona *BuscarPersona(persona *p, char x[10]){ //Aqui haremos la funcion 'Buscar' persona por el nombre, pasamnos en los parametros a persona que apunta a p y la variable char que sera lo que estamos buscando struct persona *t= p; //Nuestro puntero cabeza while ((t) && strcoll(x, t->nombre))// Mientras exista t (un nodo) y strcoll (compara el string de x con t->nombre ) t= t->sig; // Se mueve a la siguiente casilla return (t); //Mostramos si consiguio a la persona };

void EliminarPersona (persona **p, char x[10]){ //Aqui haremos la funcion 'Eliminar' por nombre, es decir, buscamos el nombre y eliminamos el registro, pasamos los parametros persona que apunta a p y x que es lo que buscamos struct persona *t= (*p); struct persona *ant= NULL; while (t){ if (strcoll(x,t->nombre)== 0){ // EL igual a 1 significa que si lo encontro, por lo tanto lo eliminara ant = t; t= t->sig;

} else{ if (ant= NULL){ ant = t; t=t->sig; delete ant; ant=t;

}else{

ant= t->sig; delete t; }

} t= ant; }}; int main(){ //Llegamos al main y vamos a crear un menu

int opcion = -1, n = 0; //Creamos la variable opcion en -1 (ya veran)

Page 3: Manejo de listas lenguaje C

y n para leer un numero, ya inicializada en 0char x[10]; //Creamos la variable x para leer nombrespersona *p = NULL; //Creamos la variable persona que apunta a p e

n NULL persona *k = NULL;

while (opcion !=0 ){ //Mientras la opcion no sea 0, por eso la inicializamos en -1

system("cls"); //System("cls") limpiar pantalla printf("\nMenu de registro de persona\n"); printf ("\n 1.Registrar persona\n"); printf ("\n 2.Mostrar persona\n"); printf ("\n 3.Buscar persona\n"); printf ("\n 4.Eliminar persona \n"); printf ("\nIndicar opcion:"); opcion = 0; scanf ("%i", &opcion); //Leemos la opcion system ("cls"); //Limpiamos pantalla printf ("\n\n"); switch (opcion){ case 1: printf ("\nCuantas personas desea registrar?"); scanf ("%i", &n); //Aqui leemos el numero a insertar fflush (stdin); RegistrarPersona (&p, n); //Llamamos a nuestra funcion registrar , la variable p ya no apunta a nulo break; //Aqui se detiene cuando se termina el case case 2: MostrarPersona(p); //Llamamos a la funcion Mostrar Persona y p no apunta a nulo break; case 3: printf ("\nColoque el nombre de la persona que desea buscar:"); scanf("%s", x); //Leemos el nombre fflush (stdin); BuscarPersona (p,x); //Llamamos a la funcion buscar con p y x k= BuscarPersona (p,x); //K toma el valor de buscar if (k){ //Si existe k mostramos MostrarPersona(p);

} else { // Si no existe imprimimos printf("No se encontro la persona"); }

break; case 4: printf ("\nIndique el nombre de la persona que desea eliminar:"); scanf ("%s", x); //leemos el nombre fflush(stdin); EliminarPersona(&p,x); //Llamamos a la funcion Eliminar persona con p y x break;

} if (opcion) {

printf( "\n\n");system("pause");system("cls");}

}

Page 4: Manejo de listas lenguaje C

}