DLL Week 3 Honors Alejandro Herrera
Code pasted in here for easier readibility.unknown
c_cpp
3 years ago
4.5 kB
7
Indexable
/* HONORS */ #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct list{struct list *prev; int num; struct list *next;} list; list *main_list; // List of functions void add_elem(); void eliminate_all_duplicates(); void eliminate_duplicate(); void generate_random_list(); void print_list(); void sort_list(); void sort_once(); int main() { int size = 200; // Size of the list srand(time(0)); generate_random_list(size); printf("\nInitial List: \n"); print_list(main_list); fflush(stdout); sort_list(size); printf("\nInitial list sorted: \n"); print_list(main_list); fflush(stdout); eliminate_all_duplicates(size); fflush(stdout); printf("\nList WITHOUT Duplicates\n"); print_list(main_list); fflush(stdout); return 0; } // Code to print a list void print_list() { int i = 0; list *head = main_list; // Iterating back to point at the beginning while (head -> prev != NULL) { head = head -> prev; } while (head != NULL) { if (i % 5 == 0) { printf("\n"); } printf("%d\t", head -> num); head = head -> next; i++; } printf("\n"); } // Code to add an element to the list void add_elem(int d) { list *head, *temp; head = (list *) malloc(sizeof(list)); head -> num = d; if (main_list == NULL) { head -> next = NULL; head -> prev = NULL; main_list = head; } else { temp = main_list; while(temp -> next != NULL) { temp = temp -> next; } temp -> next = head; head -> prev = temp; head -> next = NULL; } } // Generate a random list with a predefined size void generate_random_list(int size) { int rand_num; for (int i = 1; i <= size; i++) { rand_num = rand() % 50; add_elem(rand_num); } } // Sort the list once void sort_once() { list *temp; // Iterating back to point at the beginning while (main_list -> prev != NULL) { main_list = main_list -> prev; } while (main_list -> next != NULL) { if(main_list -> num > main_list -> next -> num) { temp = (list *) malloc(sizeof(list)); temp -> prev = main_list -> next; temp -> num = main_list -> num; temp -> next = main_list -> next -> next; main_list -> num = main_list -> next -> num; main_list -> next = temp; } main_list = main_list -> next; } } // Iteration to sort void sort_list(int size) { for (int i = 1; i <= size; i++) { sort_once(); } } // Eliminate one duplicate from the list void eliminate_duplicate() { // Iterating back to point at the beginning while (main_list -> prev != NULL) { main_list = main_list -> prev; } list *next_main = main_list; list *temp; int avoid; // Exiting condition next_main = next_main -> next; while (main_list -> next != NULL) { avoid = 0; if (main_list -> num == next_main -> num) { if (next_main -> next == NULL) { temp = next_main; temp -> prev -> next = temp -> next; temp = temp -> prev; main_list -> next -> prev = temp -> prev; main_list -> next -> num = temp -> num; main_list -> next = NULL; temp = NULL; return; } temp = next_main; temp -> prev -> next = temp -> next; main_list -> next -> prev = temp -> next -> prev; main_list -> next -> num = temp -> next -> num; main_list -> next = temp -> next; temp = NULL; main_list = main_list -> next; next_main = next_main -> next; avoid = 1; } if (avoid == 0) { main_list = main_list -> next; next_main = next_main -> next; } } } // Iteration to eliminate all duplicates void eliminate_all_duplicates(int size) { for (int i = 1; i <= size; i++) { eliminate_duplicate(); } }
Editor is loading...