PLE:Unidad5Ejercicio06

/* programa:      ejH506 fecha:         26/03/07 Descipcion:    Lista enlazada. Usamos funciones.


 * 1) include
 * 2) include
 * 3) include

struct nodo{ char nombre[20]; char telefono[9]; nodo *ps; };

int menu; void inserta_en_lista(nodo **raiz, char *nom, char *tlf); void borra_en_lista(nodo **raiz, char *nom); void imprime_lista(nodo *pl);

void main {       nodo *raiz=NULL; char nom[20], tlf[9];

int op; do{ op = menu; switch(op) { case 1: cout << "Introduzca nombre "; cin >> nom; cout << "Introduzca telefono "; cin >> tlf; inserta_en_lista(&raiz, nom, tlf); break; case 2: cout << "Introduzca nombre "; cin >> nom; borra_en_lista(&raiz, nom); break; case 3: imprime_lista(raiz); break; }       }while(op != 4); getch; }

int menu {       int opc; clrscr; cout << endl << endl << endl; cout << "         MENU" << endl; cout << "         ====" << endl; cout << "1- Insertar un elemento" << endl; cout << "2- Eliminar un elemento" << endl; cout << "3- Mostrar la agenda" << endl; cout << "4- Salir" << endl; cout << endl << endl; cout << "¿Opcion? :"; cin >> opc; return opc; }

void inserta_en_lista(nodo **raiz, char *nom, char *tlf) {       nodo *nuevo, *ant=*raiz; // Primero creamos el nodo nuevo nuevo=new nodo; // Copiamos los datos strcpy(nuevo->nombre,nom); strcpy(nuevo->telefono,tlf);

if(*raiz==NULL || strcmp(ant->nombre, nom) >= 0) //Insertamos al principio {               nuevo->ps = *raiz; *raiz = nuevo; }       else //Buscamos posicion {               while(ant->ps!=NULL && strcmp(ant->ps->nombre, nom) < 0) {                       ant = ant->ps; }               nuevo->ps = ant->ps; ant->ps = nuevo; } }

void borra_en_lista(nodo **raiz, char *nom) {       nodo *pos=*raiz; nodo *ant=pos; if(*raiz!=NULL) {               while(pos!=NULL && strcmp(pos->nombre, nom) < 0) {                       ant=pos; pos=pos->ps; }               if(pos!=NULL && strcmp(pos->nombre, nom) == 0) // lo hemos encontrado {                       if(pos!=*raiz) ant->ps=pos->ps; else *raiz=pos->ps; delete pos; }       } }

void imprime_lista(nodo *pl) {       clrscr; while(pl!=NULL) {               cout << pl->nombre << '\t'; cout << pl->telefono << endl; pl=pl->ps; }       printf("\nPulse una tecla para continuar"); getch; }