DLL Week 3 Honors Alejandro Herrera
Code pasted in here for easier readibility.unknown
c_cpp
4 years ago
4.5 kB
10
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...