Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

A complex number can be represented by two parts, real and image. A series compl

ID: 3557618 • Letter: A

Question

A complex number can be represented by two parts, real and image. A series complex data can be organized as a group of elements by linked list, which is shown as below: struct Complex

{

float real; float image;

struct Complex *next;

};

struct Complex* Generate (float a, float b)

{

// return one new Complex node

}

void Push (struct Complex **source, struct Complex *newNode)

{

// create linked list data by stack creation,

// insert the newNode into the head of source.

// (backward linked list creation)

}

void Print (struct Complex *source)

{

// print out all linked list data as the form, A+Bi,

// and the related distance, |A+Bi|

}

void FrontBackSplit (struct Complex* source, struct Complex** front, struct Complex** back)

{

// Split the nodes of the given list into front and back halves,

// and return the two lists using the reference parameters.

// If the length is odd, the extra node should go in the front list.

// You will probably need special case code to deal with the

// (length <2) cases.

}

void Sort (struct Complex **source)

{

// sort the data of linked list source in increasing order of

// complex number distance

}

struct Complex* AppendMergeReal (struct Complex* source1,

struct Complex* source2)

{

// Merge two complex linked lists (source1 and source2) into

// union of real part of source1 and source2.

// For example, real part of source1 are {1 2 3 3 5}, and real part

// of source2 are {2 3 5 8 8 9}, the merged result are {1 2 3 3 5 8 8 9}.

}

void RecursiveReverse (struct Complex** source)

{

// Recursively reverses the given linked list by changing its .next

// pointers and its head pointer in one pass of the list.

}

Please verify your program by following test code

int main()

{

float data1_real[11]   = {3, 2, -5, -9,   7, 9, 4, -2,   4, -7, -7};

float data1_image[11] = {7, -8, -7, 5, -2, 4, 4, 3, -6, 7, 9};

struct Complex *newNode;

struct Complex *source1 = NULL, *dest = NULL;

struct Complex *front, *back; char c;

// Generate Complex data linked list with data1 for (int i=0; i<11; i++) {

newNode = Generate(data1_real[i], data1_image[i]); Push(&source1, newNode);

}

// print out complex data of source1 printf("Original data of source1: "); Print(source1);

// use FrontBackSplit() to divide source1 data into front part

// and back part, and print out these two split data FrontBackSplit(source1, &front, &back); printf(" Front part: ");

print(front); pritf(" Back part: "); print(back);

// sort input complex data according to the distance

// and print out sorted data of front and back individually printf(" Sorted front part: ");

Sort(&front); Print(front);

printf(" Sorted back part: "); Sort(&back);

Print(back);

printf(" ===================================================== ");

// sorted data according to real part

float

data2_real[6] = { 2,

3,

5,

9,

9, 9};

float

data2_image[6] = { 7,

-8,

-7,

5,

-2, 4};

float

data3_real[8] = { 3,

4,

5,

5,

6, 8, 9, 9};

float

data3_image[8] = {-8,

5,

-2,

4,

7, 9, 3, 4};

struct Complex *source2 = NULL, *source3 = NULL; struct Complex *result;

// Generate Complex data linked list with data2 and data3 for (int i=5; i>=0; i--) {

newNode = Generate(data2_real[i], data2_image[i]); Push(&source2, newNode);

}

for (int i=7; i>=0; i--) {

newNode = Generate(data3_real[i], data3_image[i]); Push(&source3, newNode);

}

// Verify AppendMergeReal() function and print out the result printf(" Original data of source2: ");

Print(source2);

printf(" Original data of source3: "); Print(source3);

printf(" Merged data of source2 and source3: "); result = AppendMergeReal(source2, source3); Print(result);

// Reverse merged data of source2 and source3 and print out the result printf(" Reverse test (merged data): "); RecursiveReverse(&result);

Print(result);

getch(); return 1;

}

float

data2_real[6] = { 2,

3,

5,

9,

9, 9};

float

data2_image[6] = { 7,

-8,

-7,

5,

-2, 4};

float

data3_real[8] = { 3,

4,

5,

5,

6, 8, 9, 9};

float

data3_image[8] = {-8,

5,

-2,

4,

7, 9, 3, 4};

Explanation / Answer

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<math.h>

struct complex
{
float real;float image;
struct complex *next;
};

struct complex *head = NULL;
struct complex *curr = NULL;
struct complex *head1 = NULL;
struct complex *curr1 = NULL;

struct complex* generate(float a,float b)
{
printf(" creating list with headnode as %f+i %f ",a,b);
struct complex *ptr = (struct complex*)malloc(sizeof(struct complex));
struct complex *ptr1 = (struct complex*)malloc(sizeof(struct complex));
if(NULL == ptr)
{
printf(" Node creation failed ");
return NULL;
}
if(NULL == ptr1)
{
printf(" Node creation failed ");
return NULL;
}
ptr->real = a;
ptr1->image=b;
ptr->next = NULL;
ptr1->next = NULL;

head = curr = ptr;
head1 = curr1 = ptr1;
return ptr;
return ptr1;
}

struct complex* add_to_list(float a,float b)
{

printf(" Adding node to beginning of list with value %f +i %f ",a,b);

struct complex *ptr = (struct complex*)malloc(sizeof(struct complex));
struct complex *ptr1 = (struct complex*)malloc(sizeof(struct complex));
if(NULL == ptr)
{
printf(" Node creation failed ");
return NULL;
}
if(NULL == ptr1)
{
printf(" Node creation failed ");
return NULL;
}
ptr->real = a;
ptr->next = NULL;
ptr1->image = b;
ptr1->next = NULL;

ptr->next = head;
head = ptr;
ptr1->next = head1;
head1 = ptr1;
return ptr;return ptr1;
}


void print_list(void)
{
struct complex *ptr = head;
struct complex *ptr1 = head1;
printf(" -------Printing list Start------- ");
while(ptr != NULL && ptr1 != NULL)
{
printf(" %f+i %f ---> ",ptr->real,ptr1->image);
printf(" |%f+i %f| = %f ",ptr->real,ptr1->image,sqrt((ptr->real)*(ptr->real) + (ptr1->image)*(ptr1->image)));
ptr = ptr->next;ptr1 = ptr1->next;
}
printf(" -------Printing list End------- ");

return;
}


int main()
{
int i;
float data1_real[11] = {3, 2, -5, -9, 7, 9, 4, -2, 4, -7, -7};
float data1_image[11] = {7, -8, -7, 5, -2, 4, 4, 3, -6, 7, 9};
struct Complex *newNode;
struct Complex *source1 = NULL, *dest = NULL;
struct Complex *front, *back; char c;
for (i=0; i<11; i++)
{
newNode = generate(data1_real[i], data1_image[i]);
add_to_list(data1_real[i], data1_image[i]);
}
print_list;
return(0);
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote