fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define true 1
  4. #define false 0
  5.  
  6.  
  7. typedef struct _nodo{
  8. int data;
  9. struct _nodo *next;
  10. struct _nodo *prev;
  11. }nodo;
  12.  
  13.  
  14. typedef struct _lista{
  15. nodo *head;
  16. }lista;
  17.  
  18.  
  19. lista *criaLista(){
  20. lista *l = (lista*)malloc(sizeof(lista));
  21. if (l != NULL){
  22. l->head = NULL;
  23. return l;
  24. }
  25. return NULL;
  26. }
  27.  
  28.  
  29. nodo *criaNodo(int data){
  30. nodo *n = (nodo*)malloc(sizeof(nodo));
  31. if (n != NULL){
  32. n->data = data;
  33. n->next = NULL;
  34. n->prev = NULL;
  35. return n;
  36. }
  37. return NULL;
  38. }
  39.  
  40.  
  41. int inserirFim(lista *l, int data){
  42. if (l == NULL) return false; //o teste de lista NULL logo aqui no topo
  43.  
  44. nodo *n = criaNodo(data);
  45.  
  46. if (l->head == NULL){
  47. l->head = n;
  48. n->next = n->prev = n;
  49. }
  50. else{
  51. n->next = l->head;
  52. n->prev = l->head->prev;
  53. l->head->prev->next = n;
  54. l->head->prev = n;
  55. }
  56. return true; //retorno true so uma vez
  57. }
  58.  
  59.  
  60. void display(lista *l){
  61. if (l != NULL && l->head != NULL){
  62. printf("\n");
  63. nodo *temp = l->head;
  64. while (temp->next != l->head){
  65. printf("%d ", temp->data);
  66. temp = temp->next;
  67. }
  68. printf("%d ", temp->data);
  69. }
  70. }
  71.  
  72.  
  73. lista *intersecao(lista *l, lista *l1){
  74. if (l != NULL && l->head != NULL && l1 != NULL && l1->head != NULL){
  75. lista *l2 = criaLista();
  76. nodo *temp = l->head->next;
  77. nodo *temp1 = l1->head->next;
  78.  
  79. inserirFim(l2, l->head->data);
  80. inserirFim(l2, l1->head->data);
  81.  
  82.  
  83. while (temp != l->head && temp1 != l1->head){
  84. inserirFim(l2, temp->data);
  85. inserirFim(l2, temp1->data);
  86. temp = temp->next;
  87. temp1 = temp1->next;
  88. }
  89.  
  90. if (temp == l->head) {
  91. temp = temp1;
  92. l = l1;
  93. }
  94.  
  95. while (temp != l->head){
  96. inserirFim(l2, temp->data);
  97. temp = temp->next;
  98. }
  99.  
  100. return l2;
  101. }
  102.  
  103. return NULL; //estava em falta
  104. }
  105.  
  106. int main()
  107. {
  108. //desconsidera a main, era só pra testar se tava funcionando.
  109. // por isso ja inserir os numeros ordenados
  110.  
  111. lista *l = criaLista();
  112. lista *l1 = criaLista();
  113.  
  114. inserirFim(l, 100);
  115. inserirFim(l, 90);
  116. inserirFim(l, 80);
  117. inserirFim(l, 70);
  118. inserirFim(l, 60);
  119. inserirFim(l, 50);
  120. inserirFim(l, 40);
  121.  
  122. display(l);
  123.  
  124. inserirFim(l1, 100);
  125. inserirFim(l1, 70);
  126. inserirFim(l1, 50);
  127. inserirFim(l1, 40);
  128.  
  129. display(l1);
  130.  
  131. lista *l3 = intersecao(l1, l);
  132.  
  133. display(l3);
  134.  
  135. printf("\n\n");
  136. system("pause");
  137. return 0;
  138. }
  139.  
Success #stdin #stdout #stderr 0s 9424KB
stdin
Standard input is empty
stdout
100 90 80 70 60 50 40 
100 70 50 40 
100 100 70 90 50 80 40 70 60 50 40 

stderr
sh: 1: pause: not found