У меня есть структура в C, которая выглядит так:
typedef struct node {
int id;
int salary;
struct node *next;
char name[30];
char phone[10];
char position[30];
} List;
У меня также есть два типа списка переменных, и я хочу отсортировать структуры по идентификатору (самый большой идентификатор будет последним). Моя идея, как решить эту проблему:
- Do ** указатель точки на * head (* head = указатель на первый член списка).
- Проверьте, больше ли ** pointer.id то ** pointer.next.id Если да -> ** pointer.next будет указывать на * pointer.next.next ** pointer.next.next будет указывать на & pointer
Вот код решение этой проблемы (потом сделаю «косметику» кода и алгоритм пузырьковой сортировки. Сначала просто хочу создать код, который будет работать):
void sort(List head) {
int length = getListLength(head);
List **currentNode = &head;
for(int i = 0; i < length; i++) {
**currentNode = &head;
for(int j = 0; j < length; j++) {
if(currentNode->id > currentNode->next->id) {
currentNode->next = currentNode->next->next;
currentNode->next->next = ¤tNode;
}
}
}
}
Есть ошибки:
^ ~~~~~
list.c:92:19: error: assigning to 'List' (aka 'struct node') from incompatible type 'List *' (aka 'struct node *'); remove &
**currentNode = &head;
^ ~~~~~
list.c:94:21: error: member reference base type 'List *' (aka 'struct node *') is not a structure or union
if(currentNode->id > currentNode->next->id) {
~~~~~~~~~~~^ ~~
list.c:94:39: error: member reference base type 'List *' (aka 'struct node *') is not a structure or union
if(currentNode->id > currentNode->next->id) {
~~~~~~~~~~~^ ~~~~
list.c:95:20: error: member reference base type 'List *' (aka 'struct node *') is not a structure or union
currentNode->next = currentNode->next->next;
~~~~~~~~~~~^ ~~~~
list.c:95:40: error: member reference base type 'List *' (aka 'struct node *') is not a structure or union
currentNode->next = currentNode->next->next;
~~~~~~~~~~~^ ~~~~
list.c:96:20: error: member reference base type 'List *' (aka 'struct node *') is not a structure or union
currentNode->next->next = ¤tNode;
~~~~~~~~~~~^ ~~~~
Пожалуйста, дайте мне способ исправить это (не решая проблему. Просто хочу знать, что не так в моем коде, а затем исправить это самостоятельно).
Основная функция:
int main() {
List *head = (List *) malloc(sizeof(List));
if(head == NULL) {
return 1;
}
head -> id = 332513075;
head -> salary = 1000;
strcpy(head -> name, "Name Lastname");
strcpy(head -> phone, "0587885238");
strcpy(head -> position, "cleaner");
head -> next = (List *) malloc(sizeof(List));
head -> next->id = 2;
head -> next->salary = 2000;
strcpy(head -> next -> name, "Another name");
strcpy(head -> next -> phone, "1234567890");
strcpy(head -> next -> position, "CEO");
head -> next -> next = NULL;
sort(*head);
print_list(*head);
return 0;
}