/* 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; pnodo ant; }; 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; nuevo->ant=NULL; } else cout<<"Memoria llena"<sig=lis.inicio; lis.inicio->ant=nuevo; 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 { aux=lis.fin;//aux=i->sig; lis.fin=aux->ant; lis.fin->sig=NULL; aux->ant=NULL; } lis.cont--; } return aux; } //Mostrar los elementos de la lista void mostrar_lista(tlista lis) { pnodo i; cout<<"\ndel principio al final"<sig) cout<dato<ant) // cout<dato<>opc; } 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->ant=nuevo; lis.inicio=nuevo; } else { nuevo->ant=lis.fin; lis.fin->sig=nuevo; lis.fin=nuevo; } lis.cont++; } } void mostrar_rec(pnodo lis) { if(lis!=NULL) {cout<dato<ant); //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); }