Fandom

Scratchpad

PLE:Unidad7Ejercicio11

219,594pages on
this wiki
Add New Page
Discuss this page0 Share
/*
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;
        }
    }
}

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.

Also on Fandom

Random wikia