Advertisement
kenobi_am

Untitled

May 26th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.60 KB | None | 0 0
  1. ///////TadSLL.H
  2. #ifndef ESTRUTURA_H
  3. #define ESTRUTURA_H
  4.  
  5. #ifndef TRUE
  6. #define TRUE 1
  7. #endif
  8. #ifndef FALSE
  9. #define FALSE 0
  10. #endif
  11.  
  12. typedef struct _node_{
  13.     void* data;
  14.     struct _node_ *next;
  15. }SLNode;
  16.  
  17. typedef struct _list_{
  18.     SLNode *first;
  19.     SLNode *cur;
  20.     SLNode *last;
  21. }SLList;
  22.  
  23. SLList* createList();
  24. int destroyList(SLList *head);
  25. int insertList(SLList *l, void* data);
  26. void** removeFirst(SLList *l);
  27. void** getFirst(SLList *l);
  28. void** getNext(SLList *l);
  29. int getNumElms(SLList *l);
  30. void** Query(SLList *l, void* key, int (*compara) (void*, void*));
  31. #endif /* ESTRUTURA_H */
  32.  
  33. //--------------------------------------------------------------------
  34. ////////////////////////TadSLL.CPP
  35. #include <iostream>
  36. #include "TadSLL.h"
  37.  
  38. SLList* createList(){
  39.     SLList* head = new SLList;
  40.        
  41.     if(head != NULL){
  42.         head->first = NULL;
  43.         return head;
  44.     }
  45.     return NULL;
  46. }
  47.  
  48. int destroyList(SLList *head){
  49.     if(head != NULL){
  50.         if(head->first == NULL){
  51.             delete head;
  52.             return TRUE;
  53.         }
  54.     }
  55.    
  56.     return FALSE;
  57. }
  58.  
  59. int insertList(SLList *l, void* data){
  60.     SLNode *novo;
  61.     if(l!= NULL && data != NULL){
  62.         novo = new SLNode();
  63.         novo->data = data;
  64.         if(l->first == NULL){
  65.             l->first = novo;
  66.         }else{
  67.             l->last->next = novo;
  68.         }
  69.         l->last = novo;
  70.         return TRUE;
  71.     }
  72.     return FALSE;
  73. }
  74.  
  75. void** removeFirst(SLList *l){
  76.     SLNode *no;
  77.     void* *data;
  78.    
  79.     if(l != NULL){
  80.         no = l->first;
  81.         l->first = no->next;
  82.         if(l->first == NULL){
  83.             l->last = NULL;
  84.         }
  85.        
  86.         *data = no->data;
  87.         delete no;
  88.     }
  89.     return data;
  90. }
  91.  
  92. void** getFirst(SLList *l){
  93.     void* *data;
  94.     if(l != NULL){
  95.         if(l->first != NULL){
  96.             *data = l->first->data;
  97.             l->cur = l->first->next;
  98.         }
  99.     }
  100.    
  101.     return data;
  102. }
  103.  
  104. void** getNext(SLList *l){
  105.     void* *data;
  106.     if(l != NULL){
  107.         if(l->first != NULL){
  108.             l->cur = l->cur->next;
  109.             if(l->cur != NULL){
  110.                 *data = l->cur->data;
  111.             }
  112.         }
  113.     }
  114.    
  115.     return data;
  116. }
  117.  
  118. int getNumElms(SLList *l){
  119.     SLNode *no;
  120.     int cont = 0;
  121.    
  122.     if(l != NULL){
  123.         no = l->first;
  124.         while(no != NULL){
  125.             cont++;
  126.             no = no->next;
  127.         }
  128.     }
  129.     return cont;
  130. }
  131.  
  132. int queueIsEmpty(SLList *head){
  133.     if(head != NULL){
  134.         if(head->first != NULL){
  135.             return FALSE;
  136.         }
  137.     }
  138.     return TRUE;
  139. }
  140.  
  141. void** Query(SLList *l, void* key, int (*compara) (void*, void*)){
  142.     SLNode *no;
  143.     void* *data;
  144.     if(!queueIsEmpty(l) && key != NULL){
  145.         no = l->first;
  146.         while(compara(key,no->data) == FALSE){
  147.             no = no->next;
  148.         }
  149.         *data = no->data;
  150.         return data;
  151.     }
  152.     return NULL;
  153. }
  154.  
  155. //--------------------------------------------------------------------------------
  156. //Main.CPP
  157. #include <iostream>
  158. #include <cstdio>
  159. #include <cstdlib>
  160. #include "TadSLL.h"
  161.  
  162. using namespace std;
  163.  
  164. /*
  165.  *
  166.  */
  167. void imprimeMenu();
  168. void menuConjunto(char c);
  169. void preencheConjunto(SLList *l, char c);
  170. void imprimirLista(SLList *l, char c);
  171.  
  172. int main(int argc, char** argv) {
  173.     SLList *cjA, *cjB, *cjC;
  174.     int continua = TRUE, optMenu, optSubMenu;
  175.     char c = '0';
  176.    
  177.     do{
  178.         if(c == '0'){
  179.             system("clear");
  180.             imprimeMenu();
  181.             cin >> optMenu;
  182.         }
  183.        
  184.         switch(optMenu){
  185.             case 1:
  186.                 c = 'A';
  187.                 menuConjunto(c);
  188.                 cin >> optSubMenu;
  189.                 switch(optSubMenu){
  190.                     case 1:
  191.                         if(cjA == NULL){
  192.                             cjA = createList();
  193.                             if(cjA != NULL){
  194.                                 cout << "Lista criada com sucesso!!!"<<endl;
  195.                             }
  196.                         }else{
  197.                             cout << "A lista ja existe... Selecione outra opcao..." << endl;
  198.                         }
  199.                         cin.ignore();
  200.                         cin.get();
  201.                         break;
  202.                     case 2:
  203.                         preencheConjunto(cjA,c);
  204.                         break;
  205.                     case 3:
  206.                         imprimirLista(cjA,c);
  207.                         break;
  208.                     case 0:
  209.                         c = '0';
  210.                         break;
  211.                     default:
  212.                         cout << "Informe uma opcao valida" << endl;
  213.                 }
  214.                 break;
  215.             case 2:
  216.                 c = 'B';
  217.                 break;
  218.             case 3:
  219.                
  220.                 break;  
  221.             case 4:
  222.                
  223.                 break;
  224.             case 5:
  225.                
  226.                 break;
  227.             case 6:
  228.                
  229.                 break;
  230.             case 0:
  231.                
  232.                 break;
  233.                
  234.             default:
  235.                 cout << "Informe uma opcao valida" << endl;
  236.                
  237.         }
  238.        
  239.     }while(continua == TRUE);
  240.     return 0;
  241. }
  242.  
  243. void imprimeMenu(){
  244.     system("clear");
  245.     cout << "****************OPERACOES COM TABELAS****************" << endl;
  246.     cout << "SELECIONE UMAS DAS OPCOES" << endl;
  247.     cout << "1 - Conjunto A\n2 - Conjunto B" << endl;
  248.     cout << "3 - (A U B) \n4 - (A ∩ B) \n5 - (A - B) \n6 - Complemento(A,B)\n";
  249.     cout << "0 - Sair" << endl;
  250. }
  251.  
  252. void menuConjunto(char c){
  253.     system("clear");
  254.     cout << "****CONJUNTO " << c << "****" << endl;
  255.     cout << "1 - Criar \n2 - Preencher \n3 - Mostrar \n0 - Voltar" << endl;
  256. }
  257.  
  258. void preencheConjunto(SLList *l, char c){
  259.     int cont = 1, continua = TRUE, data;
  260.     system("clear");
  261.     cin.ignore();
  262.     do{
  263.         cout << "Informe o " << cont << "Elemento da Tabela " << c << endl;
  264.         cin >> data;
  265.         if(insertList(l,(void*)data) == TRUE){
  266.             cout << "\nInserido!!! Deseja Continuar? (0-Nao 1-Sim)";
  267.             cont++;
  268.         }else{
  269.             cout << "\nUm erro ocorreu. Tentar novamente? (0-Nao 1-Sim)";
  270.         }
  271.         cin >> continua;
  272.     }while(continua == TRUE);
  273. }
  274.  
  275. void imprimirLista(SLList *l, char c){
  276.     void* data;
  277.     int *num;
  278.     cin.ignore();
  279.     system("clear");
  280.     cout << "Elementos do Conjunto " << c << ":\n";
  281.     data = getFirst(l);
  282.     while(data != NULL){
  283.         num = (int*) data;
  284.         cout << num << "\t";
  285.         data = getNext(l);
  286.     }
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement