12. Ejercicio 2

12.1. ejemplo de solución

//  Ing. Germán Andrés Xander 2022  //

#include<iostream>
using namespace std;
 
struct datos{
    int orden;
    char texto[10];
    struct datos *pprox;
};
 
void agregar_final(datos *&pt);
void mostrar(datos *pt);
 
int main() {
    char opcion;
    datos *lista=NULL;            //creo el puntero en main()
    do{
        cout<<"\t         Menu"<<endl
            <<"\t a para agregar instancias"<<endl
            <<"\t m para mostrar"<<endl
            <<"\t s salir"<<endl;
        cin>>opcion;
        switch(opcion){
            case 'a':
                agregar_final(lista);
                break;
            case 'm':
                mostrar(lista);
                break;
        }
    }while(opcion!='s');
    return 0;
}
 
void agregar_final(datos *&pt){
    if(!pt){
        pt=new datos;
        cout<<"ingrese orden"<<endl;
        cin>>pt->orden;
        cout<<"ingrese texto"<<endl;
        cin>>pt->texto;
        pt->pprox=pt;    // para que sea lista circular el puntero al próximo
                        // de la última instancia debe apuntar a la primera
    }else{
        datos *pt2=pt;
        while(pt2->pprox!=pt){
            pt2=pt2->pprox;
        }
        pt2->pprox=new datos;
        cout<<"ingrese orden"<<endl;
        cin>>pt2->pprox->orden;
        cout<<"ingrese texto"<<endl;
        cin>>pt2->pprox->texto;
        pt2->pprox->pprox=pt;
    }
    cout<<endl;
}

void mostrar(datos *pt){  //como no pasa por referencia no se alterar el original
    cout<<endl<<"\tpresione v para volver"<<endl<<endl;
    cin.ignore();
    do{
        cout<<"orden: "<<pt->orden<<"\t texto: "<<pt->texto;
        pt=pt->pprox;
    }while(cin.get()!='v');
    cout<<endl<<endl;
}