/* Considerando una lista de valores enteros, con puntero inicio y final, 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. para un registro que guarde la información de un producto (codigo, nombre, precio) */ #include #include #include using namespace std; const int MAX=10; typedef char tcad[30]; typedef struct tproducto{ int codigo; tcad nombre; float precio; }; typedef struct tnodo *pnodo; typedef struct tnodo{ tproducto 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); bool lista_llena(tlista lis); //Quitar un elemento pnodo quitar_final(tlista &lis); //Recorrer/Mostrar la lista void mostrar_lista(tlista lis); void mostrar(tproducto prod); void mostrar_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<dato); delete(eliminado); } else cout<<" No se puede eliminar, lista vacia"<> nuevo->dato.codigo; cout<<"Ingrese nombre: "; fflush(stdin); gets(nuevo->dato.nombre); cout<<"Ingrese precio: "; cin>>nuevo->dato.precio; 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) mostrar(i->dato);// cout<dato<>opc; } bool lista_llena(tlista lis) { return (lis.cont==MAX); } void mostrar_rec(pnodo lis) { if(lis!=NULL) {// cout<dato<sig); mostrar(lis->dato); } }