Estructuras con Punteros
Condições de conclusão
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;
}