/* Considerando una lista de valores enteros, con dos punteros, modifique la definición y operaciones básicas de listas de modo que sea posible registrar la cantidad de valores. Desarrolle las operaciones iniciar_lista, crear_nodo, agregar_inicio, quitar_final y mostrar_lista. Agregar luego las operaciones agregar pares al inicio, impares al final mostrar de manera recursiva, ordenar los valores sumar los nodos */ #include #include using namespace std; const int MAX=10; typedef struct tnodo *pnodo; typedef struct tnodo{ int dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; int cont; pnodo fin; }; //Inicialización de la lista void iniciar_lista(tlista &lis); //Creación del nodo void crear(pnodo &nuevo); //Agregar un elemento void agregar_inicio(tlista &lis, pnodo nuevo); void agregar(tlista &lis, pnodo nuevo); bool lista_llena(tlista lis); //Quitar un elemento pnodo quitar_final(tlista &lis); //Recorrer/Mostrar la lista void mostrar_lista(tlista lis); void mostrar_rec(pnodo lis); void ordenar(tlista lis); int suma_rec(pnodo lis); void menu(int &opc); main() { tlista lista; pnodo nuevo, eliminado; int op, valor, op2; iniciar_lista(lista); do{ system("cls"); menu(op); switch(op) { case 1: cout<<".....Agregar valor ......"<dato<> nuevo->dato; nuevo->sig=NULL; } else cout<<"Memoria llena"<sig=lis.inicio; lis.inicio=nuevo; lis.cont++; } } } pnodo quitar_final(tlista &lis) { pnodo aux, i; if(lis.inicio==NULL)//lis.cont==0 lis.fin==NULL aux=NULL; else { if(lis.inicio->sig==NULL) //lis.cont==1 o lis.inicio==lis.fin { aux=lis.inicio; //aux=lis.fin lis.inicio=NULL; lis.fin=NULL; } else {for(i=lis.inicio; (i->sig)!=lis.fin;i=i->sig); aux=lis.fin;//aux=i->sig; lis.fin=i; i->sig=NULL;//lis.fin->sig=NULL; } lis.cont--; } return aux; } //Mostrar los elementos de la lista void mostrar_lista(tlista lis) { pnodo i; for(i=lis.inicio; i!=NULL; i=i->sig) cout<dato<>opc; } /* void agregar(tlista &lis, pnodo nuevo) { if(lista_llena(lis)==true) { cout<<"no se puede agregar"<dato % 2==0) agregar_inicio(lis, nuevo); else {//agregar por el final if(lis.fin==NULL) { lis.inicio=nuevo; lis.fin=nuevo; lis.cont++; } else { lis.fin->sig=nuevo; lis.fin=nuevo; lis.cont++; } } } } */ void agregar(tlista &lis, pnodo nuevo) { if(lista_llena(lis)==true) { cout<<"no se puede agregar"<dato %2==0) { nuevo->sig=lis.inicio; lis.inicio=nuevo; } else { lis.fin->sig=nuevo; lis.fin=nuevo; } lis.cont++; } } void mostrar_rec(pnodo lis) { if(lis!=NULL) {// cout<dato<sig); //RRC cout<dato<sig) { for(j=i->sig; j!=NULL; j=j->sig) if(i->datodato) { aux=i->dato; i->dato=j->dato; j->dato=aux; } } } int suma_rec(pnodo lis) { if(lis==NULL) return 0; else return lis->dato+suma_rec(lis->sig); }