PLE:Unidad7Ejercicio11

/* programa:      Ejercicio11 Descipcion:    Lista enlazada. Inserta y eliminar mediante funciones.


 * 1) include
 * 2) include

struct nodo{ int num; nodo *ps; };

char menu; void insertaPpio(nodo **r); void insertaFin(nodo **r); void insertaOrd(nodo **r); void borraPpio(nodo **r); void borraFin(nodo **r); void borraOrd(nodo **r); void muestra(nodo *r);

void main {       nodo *raiz=NULL; char opc = 'p';

while(opc != 's') {               opc = menu; switch(opc) {                       case 'p':       insertaPpio(&raiz); break; case 'f':      insertaFin(&raiz); break; case 'o':      insertaOrd(&raiz); break; case 'b':      borraPpio(&raiz); break; case 'u':      borraFin(&raiz); break; case 'r':      borraOrd(&raiz); break; case 'm':      muestra(raiz); }       } }

char menu {       char o;        cout << "MENU DE OPCIONES" << endl << endl; cout << "p - Inserta por el principio de la lista" << endl; cout << "f - Inserta por el final de la lista" << endl; cout << "o - Inserta ordenadamente en la lista" << endl; cout << "m - Muestra la lista en pantalla" << endl; cout << "b - borra el primer nodo de la lista" << endl; cout << "u - borra el ultimo nodo de la lista" << endl; cout << "r - borra ordenadamente en la lista" << endl; cout << "s - Salir" << endl << endl; cout << "Elija una opcion "; cin >> o;       return o; }

void insertaPpio(nodo **r) {       nodo *nuevo; // Creamos el nodo nuevo = new nodo; // Introduzco numero cout << "Introduzca un numero "; cin >> nuevo->num; // Enlazamos nuevo->ps = *r; *r = nuevo; }

void insertaFin(nodo **r) {       nodo *nuevo, *ult; // Creamos el nodo nuevo = new nodo; // Introduzco numero cout << "Introduzca un numero "; cin >> nuevo->num; // Localizamos el ultimo nodo de la lista if(*r == NULL) {               nuevo->ps = NULL; *r = nuevo; }       else {               ult = *r; while(ult->ps != NULL) ult = ult->ps; nuevo->ps = NULL; ult->ps = nuevo; } }

void insertaOrd(nodo **r) {       nodo *nuevo, *ant; // Creamos el nodo nuevo = new nodo; // Introduzco numero cout << "Introduzca un numero "; cin >> nuevo->num; // Localizamos el ultimo nodo de la lista if(*r == NULL || (*r)->num >= nuevo->num) {               nuevo->ps = *r; *r = nuevo; }       else {               ant = *r; while(ant->ps != NULL && ant->ps->num < nuevo->num) ant = ant->ps; nuevo->ps = ant->ps; ant->ps = nuevo; } }

void muestra(nodo *r) {       while(r != NULL) {               cout << r->num << '\t'; r = r->ps; }       cout << endl; }

void borraPpio(nodo **r) {       nodo *pos; pos = *r; if(pos != NULL) {               *r = pos->ps; delete pos; } }

void borraFin(nodo **r) {   nodo *pos=*r; nodo *ant=pos;

if(*r!=NULL) {       while(pos->ps!=NULL) {           ant=pos; pos=pos->ps; }

if(pos!=*r) ant->ps=pos->ps; else *r=pos->ps; delete pos; } }

void borraOrd(nodo **r) {   nodo *pos=*r; nodo *ant=pos; int numero;

cout << "Introduzca numero a eliminar "; cin >> numero;

if(*r!=NULL) {       while(pos!=NULL && pos->numps; }       if(pos!=NULL && pos->num==numero) // lo hemos encontrado {           if(pos!=*r) ant->ps=pos->ps; else *r=pos->ps; delete pos; }   } }