Fandom

Scratchpad

PLE:Unidad7Ejercicio11

215,990pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

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

#include<iostream.h>
#include<string.h>

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->num<numero)
        {
            ant=pos;
            pos=pos->ps;
        }
        if(pos!=NULL && pos->num==numero) // lo hemos encontrado
        {
            if(pos!=*r)
                ant->ps=pos->ps;
            else
                *r=pos->ps;
            delete pos;
        }
    }
}

Also on Fandom

Random wikia