Я относительно новичок в C и указателях. Я пытаюсь отсортировать, а затем распечатать связанный список структур. Либо я пропускаю логическую ошибку, либо я не совсем понимаю указатели. Может кто-нибудь объяснить мне, что мне не хватает в этом коде? Заранее благодарю!
// *** Sort Linked List ( Merge Sort ) ***
struct address_node *newRoot;
// ptr, rearPtr, and tempRoot are also struct Pointers
newRoot = root;
root = root->next;
while (root != NULL)
{
tempRoot = root;
ptr = newRoot;
rearPtr = newRoot;
while (ptr != NULL)
{
printf("here");
if ((root->frequency) == (ptr->frequency))
{ // SPECIAL CASE: To determine read hierarchy for repeated
// Entries
if ((root->read_order) < (ptr->read_order))
{
if (ptr == newRoot)
{
root = root->next;
tempRoot->next = newRoot;
newRoot = tempRoot;
ptr = NULL;
}
else
{
root = root->next;
tempRoot->next = ptr;
rearPtr->next = tempRoot;
ptr = NULL;
}
}
}
else if ((root->frequency) > ptr->frequency)
{ // To ADD BEFORE an ENTRY
if (ptr == newRoot)
{
root = root->next;
tempRoot->next = newRoot;
newRoot = tempRoot;
ptr = NULL;
}
else
{
root = root->next;
tempRoot->next = ptr;
rearPtr->next = tempRoot;
ptr = NULL;
}
}
else if (ptr->next == NULL)
{ // if END OF LIST
root = root->next;
ptr->next = tempRoot;
ptr = NULL;
}
else
{ // SPOT NOT FOUND YET< MOVE FORWARD THROUGH LIST
rearPtr = ptr;
ptr = ptr->next;
}
}
}
// *** PRINT ***
ptr = newRoot;
if (numOut == 0)
{
while (ptr != NULL)
{
printf("0x%zx :%d\n", ptr->address, ptr->frequency);
ptr = ptr->next;
}
}
else
{
while (ptr != NULL && numOut > 0)
{
printf("0x%zx :%d\n", ptr->address, ptr->frequency);
numOut--;
ptr = ptr->next;
}
}
void print_list(const char *tag, struct address_node const *list)
илиvoid print_list(FILE *fp, const char *tag, struct address_node const *list)
). - person Jonathan Leffler   schedule 07.10.2013[c] merge sort list
в поле поиска SO. Это может привести к использованию сортировки слиянием для сортировки связанных списков и, возможно, к другие вопросы тоже. - person Jonathan Leffler   schedule 07.10.2013