121 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| struct node {
 | |
|     int data;
 | |
|     struct node *prev;
 | |
|     struct node *next;
 | |
| };
 | |
| 
 | |
| typedef struct node *NODE;
 | |
| 
 | |
| NODE getnode() {
 | |
|     NODE x;
 | |
|     x = (NODE)malloc(sizeof(struct node));
 | |
|     if (x == NULL) {
 | |
|         printf("Out of memory\n");
 | |
|         exit(0);
 | |
|     }
 | |
|     return x;
 | |
| }
 | |
| 
 | |
| void insert_rear(NODE *head, int item) {
 | |
|     NODE temp, cur;
 | |
|     temp = getnode();
 | |
|     temp->data = item;
 | |
|     temp->next = NULL;
 | |
|     if (*head == NULL) {
 | |
|         temp->prev = NULL;
 | |
|         *head = temp;
 | |
|         return;
 | |
|     }
 | |
|     cur = *head;
 | |
|     while (cur->next != NULL)
 | |
|         cur = cur->next;
 | |
|     cur->next = temp;
 | |
|     temp->prev = cur;
 | |
| }
 | |
| 
 | |
| NODE union_lists(NODE head1, NODE head2) {
 | |
|     NODE result = NULL;
 | |
|     NODE temp = head1;
 | |
|     while (temp != NULL) {
 | |
|         insert_rear(&result, temp->data);
 | |
|         temp = temp->next;
 | |
|     }
 | |
|     temp = head2;
 | |
|     while (temp != NULL) {
 | |
|         NODE cur = result;
 | |
|         int found = 0;
 | |
|         while (cur != NULL) {
 | |
|             if (cur->data == temp->data) {
 | |
|                 found = 1;
 | |
|                 break;
 | |
|             }
 | |
|             cur = cur->next;
 | |
|         }
 | |
|         if (!found)
 | |
|             insert_rear(&result, temp->data);
 | |
|         temp = temp->next;
 | |
|     }
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| NODE intersection_lists(NODE head1, NODE head2) {
 | |
|     NODE result = NULL;
 | |
|     NODE temp = head1;
 | |
|     while (temp != NULL) {
 | |
|         NODE cur = head2;
 | |
|         while (cur != NULL) {
 | |
|             if (temp->data == cur->data) {
 | |
|                 insert_rear(&result, temp->data);
 | |
|                 break;
 | |
|             }
 | |
|             cur = cur->next;
 | |
|         }
 | |
|         temp = temp->next;
 | |
|     }
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| void display(NODE head) {
 | |
|     NODE temp = head;
 | |
|     while (temp != NULL) {
 | |
|         printf("%d ", temp->data);
 | |
|         temp = temp->next;
 | |
|     }
 | |
|     printf("\n");
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|     NODE list1 = NULL;
 | |
|     NODE list2 = NULL;
 | |
| 
 | |
|     // Inserting elements into list1
 | |
|     insert_rear(&list1, 1);
 | |
|     insert_rear(&list1, 2);
 | |
|     insert_rear(&list1, 3);
 | |
| 
 | |
|     // Inserting elements into list2
 | |
|     insert_rear(&list2, 3);
 | |
|     insert_rear(&list2, 4);
 | |
|     insert_rear(&list2, 5);
 | |
| 
 | |
|     // Displaying the lists
 | |
|     printf("List 1: ");
 | |
|     display(list1);
 | |
|     printf("List 2: ");
 | |
|     display(list2);
 | |
| 
 | |
|     // Union of the lists
 | |
|     NODE union_result = union_lists(list1, list2);
 | |
|     printf("Union: ");
 | |
|     display(union_result);
 | |
| 
 | |
|     // Intersection of the lists
 | |
|     NODE intersection_result = intersection_lists(list1, list2);
 | |
|     printf("Intersection: ");
 | |
|     display(intersection_result);
 | |
| 
 | |
|     return 0;
 | |
| }
 | 
