A complex number can be represented by two parts, real and image. A series compl
ID: 3557616 • 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);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.