.任意输入一组复数,将该组复数按模从小到大排列(用单链表实现)。 struct Complex { double real; double imag; };
时间: 2024-05-19 12:12:50 浏览: 62
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct Complex {
double real;
double imag;
struct Complex *next;
};
void insert(struct Complex **head, double real, double imag) {
struct Complex *new_node = (struct Complex *)malloc(sizeof(struct Complex));
new_node->real = real;
new_node->imag = imag;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
} else {
struct Complex *curr = *head;
struct Complex *prev = NULL;
while (curr != NULL && sqrt(curr->real * curr->real + curr->imag * curr->imag) < sqrt(real * real + imag * imag)) {
prev = curr;
curr = curr->next;
}
if (prev == NULL) {
new_node->next = *head;
*head = new_node;
} else {
prev->next = new_node;
new_node->next = curr;
}
}
}
void print_list(struct Complex *head) {
while (head != NULL) {
printf("%.2f + %.2fi\n", head->real, head->imag);
head = head->next;
}
}
int main() {
struct Complex *head = NULL;
int n;
printf("Enter the number of complex numbers: ");
scanf("%d", &n);
printf("Enter %d complex numbers (in the format a+bi): \n", n);
for (int i = 0; i < n; i++) {
double real, imag;
scanf("%lf+%lfi", &real, &imag);
insert(&head, real, imag);
}
printf("The complex numbers sorted by magnitude are:\n");
print_list(head);
return 0;
}
阅读全文