Ejemplo de multilistas (listas de listas) para Estructuras de datos.

C++:
  1. //CESAR JORGE SANCHEZ OROPEZA ITESM CCM 00922794   
  2. // ESTRUCTURA DE DATOS
  3. // fucuyama@yahoo.com
  4. // MULTILISTAS
  5.  
  6.  
  7. #include <iostream.h>
  8. #include <stdlib.h>
  9. #define MAX 4
  10.  
  11. struct proovedor
  12. {
  13.     int data;
  14.     char string[30];
  15.    
  16.     struct proovedor *sig,*lant,*lsig;
  17.    
  18. };
  19.  
  20. struct producto
  21. {
  22.     int data;
  23.     struct proovedor *inicioprov;
  24.     struct producto *sig;
  25.     struct producto *osig,*oant;
  26.    
  27. }
  28.  
  29. class Multilista
  30. {
  31.    
  32.     private:
  33.  
  34.         struct producto *inicio;
  35.         struct producto *listaofertas;
  36.         struct proovedor *lista;
  37.  
  38.  
  39.  
  40.     public:
  41.         void crear(void);
  42.         void inserta(int);
  43.         int borra(void);
  44.         void muestra(void);
  45.         void proovedores(void);
  46.         void proovedoresb(void);
  47.         void ofertas(int);
  48.         void printofertas(void);
  49. };
  50.  
  51.  
  52.  
  53. void Multilista::crear(void)
  54. {
  55.  
  56.     inicio = NULL;
  57.     lista = NULL;
  58.     listaofertas = NULL;
  59.  
  60.  
  61. }
  62.  
  63.  
  64. void Multilista::inserta(int nombre){
  65.    
  66.     int resp = 0;
  67.     struct producto *nuevo,*ap1;
  68.    
  69.     struct proovedor *ap3; //uso para la lista de proovedores
  70.    
  71.    
  72.  
  73.     nuevo = new producto;
  74.  
  75.  
  76.     //Se insertan los proovedores de forma cirular
  77.    
  78.     struct proovedor *inicio2;
  79.     inicio2 = NULL;
  80.     struct proovedor *nuevo2, *ap2;
  81.    
  82.  
  83.    
  84. do{
  85.  
  86.  
  87.     nuevo2 = new proovedor;
  88.  
  89.     nuevo2->lsig = NULL;
  90.     nuevo2->lant = NULL;   
  91.     cout<<"\nIntroduce un Proovedor\n"
  92.     cin>> nuevo2->string;
  93.     nuevo2->sig = NULL;
  94.    
  95.     if( inicio2 == NULL ){
  96.            
  97.         inicio2 = nuevo2;
  98.         nuevo2->sig = nuevo2;
  99.         cout<<"ok";
  100.  
  101.     }
  102.  
  103.     else
  104.     {
  105.         ap2 = inicio2;
  106.        
  107.  
  108.         while(ap2->sig != inicio2 )
  109.        
  110.             ap2 = ap2->sig;
  111.        
  112.             nuevo2->sig = ap2->sig;
  113.             ap2->sig = nuevo2;
  114.             cout<<"ok";
  115.    
  116.     }
  117.    
  118.  
  119.     if(lista == NULL){
  120.  
  121.         lista = nuevo2;
  122.  
  123.     }
  124.  
  125.  
  126.  
  127.     else{
  128.         ap3 = lista;
  129.  
  130.         while(ap3->lsig != NULL )
  131.             ap3 = ap3->lsig;
  132.        
  133.  
  134.         ap3->lsig = nuevo2;
  135.         nuevo2->lant = ap3;
  136.    
  137.     }
  138.  
  139.     cout<<"\nEntre 2 para terminar, 1 para continua\n";
  140.     cin>>resp;
  141.  
  142.  
  143. }while(resp!=2);
  144.  
  145.  
  146.     //Se terminan los proovedores de forma cirular
  147.    
  148.     nuevo->inicioprov = inicio2;
  149.     nuevo->data = nombre;
  150.     nuevo->sig = NULL;
  151.    
  152.     if( inicio == NULL ){
  153.            
  154.         inicio = nuevo;
  155.     }   
  156.     else
  157.     {
  158.         ap1 = inicio;
  159.        
  160.  
  161.         while(ap1->sig != NULL )
  162.        
  163.             ap1 = ap1->sig;
  164.        
  165.        
  166.             nuevo->sig = ap1->sig;
  167.             ap1->sig = nuevo;
  168.            
  169.    
  170.     }
  171.  
  172.  
  173. }
  174.  
  175. void Multilista::muestra (void){
  176.  
  177.     struct producto *ap;
  178.     struct proovedor *ap2;
  179.  
  180.  
  181.     if(inicio != NULL)
  182.     {
  183.         ap=inicio;
  184.         while(ap!=NULL)
  185.         {
  186.             cout<<"\nNumero de Item: "<<ap->data <<"\nProovedores: ";
  187.            
  188.  
  189.  
  190.             ap2=ap->inicioprov;
  191.  
  192.                
  193.  
  194.                 while(ap2->sig != ap->inicioprov){
  195.                    
  196.                     cout<<"  "<<ap2->string <<" ";
  197.                     ap2 = ap2->sig;
  198.  
  199.                 }
  200.                 cout<<"  "<<ap2->string <<" ";
  201.             ap = ap->sig;
  202.  
  203.         }
  204.        
  205.     }
  206.  
  207.     else
  208.         cout<<"\nLSITA VACIA\n";   
  209.  
  210.  
  211.  
  212.  
  213.  
  214. }
  215.  
  216.  
  217. void Multilista::proovedores(void)
  218. {
  219.     struct proovedor *ap;
  220.  
  221.     if(lista != NULL)
  222.     {
  223.         ap=lista;
  224.         while(ap!=NULL)
  225.         {
  226.             cout<<" "<<ap->string <<" ";
  227.             ap = ap->lsig;
  228.         }
  229.        
  230.     }
  231.  
  232.     else
  233.         cout<<"\nLSITA VACIA\n";   
  234. }
  235. void Multilista::proovedoresb(void)
  236. {
  237.     struct proovedor *ap;
  238.  
  239.     if(lista != NULL)
  240.     {
  241.         ap=lista;
  242.         while(ap->lsig!=NULL)
  243.         {
  244.             ap = ap->lsig;
  245.         }
  246.  
  247.         while(ap!=NULL)
  248.         {
  249.             cout<<" "<<ap->string <<" ";
  250.             ap = ap->lant;
  251.         }      
  252.     }
  253.  
  254.     else
  255.         cout<<"\nLSITA VACIA\n";   
  256. }
  257.  
  258. void Multilista::ofertas(int valor)
  259. {
  260.     if(inicio != NULL){
  261.         struct producto *nuevo,*ap2;
  262.         nuevo = new producto;
  263.        
  264.  
  265.         nuevo = inicio;
  266.         while(nuevo != NULL && nuevo->data != valor){//ap1 viene a ser nuevo y ap2 el aux
  267.             nuevo = nuevo->sig;
  268.  
  269.         }
  270.  
  271.        
  272.  
  273.  
  274.         if(nuevo!=NULL && nuevo->data == valor)
  275.         {   
  276.  
  277.  
  278.  
  279.             if(listaofertas==NULL){
  280.                 listaofertas = nuevo;
  281.                 nuevo->osig = listaofertas;
  282.                 nuevo->oant = listaofertas;
  283.                 cout<<"\nok\n";
  284.             }
  285.             else
  286.             {
  287.                 ap2 = listaofertas;
  288.  
  289.                 while(ap2->osig != listaofertas)
  290.                     ap2 = ap2->osig;
  291.                    
  292.                 nuevo->osig = ap2 -> osig;
  293.                 nuevo ->oant = ap2;
  294.                 ap2 ->osig ->oant = nuevo;
  295.                 ap2 ->osig = nuevo;
  296.                 ;
  297.  
  298.  
  299.             }
  300.  
  301.         }
  302.         else cout<<"\no se encontro\n";
  303.  
  304.  
  305.  
  306.  
  307.  
  308.     }
  309.        
  310. }
  311.  
  312.  
  313. void Multilista::printofertas(void)
  314. {
  315.     struct producto *ap;
  316.  
  317.     if(listaofertas != NULL)
  318.     {
  319.         cout<<" print ";
  320.  
  321.         ap=listaofertas;
  322.         cout<<" "<<ap->data <<" ";
  323.  
  324.         while(ap->osig!=listaofertas)
  325.         {
  326.             ap = ap->osig;
  327.             cout<<" "<<ap->data <<" ";
  328.            
  329.         }
  330.  
  331.  
  332.     }
  333.  
  334.     else
  335.         cout<<"\nLSITA VACIA\n";
  336.        
  337. };
  338. void main(void){
  339.  
  340.  
  341.     Multilista lista;
  342.     lista.crear();
  343.  
  344. int resp,dato;
  345.  
  346.     do{
  347.         cout<<"\n Aplicacion que administra elementos de una tienda";
  348.         cout<<"\n1) IMPRIMIR";
  349.         cout<<"\n2) Ingresa";
  350.         cout<<"\n3) Imprime proovedores ";
  351.         cout<<"\n4) Imprime proovedores alrevez";
  352.         cout<<"\n5) Agrega Producto a ofertas";
  353.         cout<<"\n6) imprime ofertas";
  354.         cout<<"\n7) SALIR";
  355.         cout<<"\n   : ";
  356.  
  357.         cin>>resp;
  358.  
  359.         if(resp==1) lista.muestra();
  360.        
  361.         if(resp==2) {
  362.             cout<<"Numero de serie del producto ";
  363.             cin>>dato ;
  364.            
  365.             lista.inserta(dato);
  366.                        
  367.         }
  368.  
  369.         if(resp==3) {
  370.             lista.proovedores();
  371.                        
  372.         }   
  373.         if(resp==4) {
  374.             lista.proovedoresb();
  375.                        
  376.         }
  377.        
  378.         if(resp==5) {
  379.             cout<<"Numero de serie del producto que se desea ofertar: ";
  380.             cin>>dato;
  381.             lista.ofertas(dato);
  382.                        
  383.         }   
  384.  
  385.         if(resp==6) {
  386.             lista.printofertas();
  387.                        
  388.         }
  389.  
  390.     }while(resp!=7);
  391.  
  392.  
  393. }

Popularidad: 3%