Radix сортировка со списком ссылок - PullRequest
0 голосов
/ 03 мая 2020

Вам нужно написать несколько функций:

  1. Написать функцию для создания нового списка. Ваша функция должна создать фиктивный головной узел для представления пустого списка. ListNode newList (void); / возвращает заголовок нового пустого списка * /
  2. Запись функций для вставки элементов в список и удаления элементов из списка (Примечание. Это рекомендуемые функции. У вас могут быть дополнительные функции или другие прототипы функций, чем те, которые показаны) ListNode * removeNode (ListNode * prev); / * удалить узел после prev из списка и вернуть указатель на удаленный узел * / ListNode * insertNode (ListNode prev, данные SomeDataType); / вставляет новый узел с данными поля данных после prev и возвращает указатель на новый узел * /
  3. Запись функций для подсчета количества элементов в списке без заголовка и его печати: длина int (ListNode head); / количество элементов в списке * / void printList (ListNode head); / печать полей данных для всего списка * / Обратите внимание, что printList напечатает связанный список, реализованный для поддержки второй части вашего проекта. Несколько советов: Вам понадобится массив из десяти заголовков списка ссылок и массив из десяти соответствующих хвостов (если вы решите реализовать указатели хвостов). Вы также можете найти полезным поддерживать некоторый вспомогательный связанный список для промежуточных шагов, таких как сшивание подсписков и т. Д. c.

Чтобы повысить эффективность сортировки по основанию, вы найдете полезным реализовать функцию Вставка ListNode в хвост (хвост ListNode *, данные SomeDataType). Функция должна прикрепить новый узел к хвосту и сделать этот узел новым хвостом списка. Вам также следует реализовать функцию deleteList (ListNode * head), которую можно использовать для удаления всего списка.

У меня возникают проблемы при создании массива списков ссылок для сортировки по основанию. Для иллюстрации алгоритма здесь приведена первая последовательность S0 = {32, 100, 11, 554, 626, 122, 87, 963, 265, 108, 9}. Мы начнем с распределения элементов S0 по значению 0-место di git (место одного), затем должны быть десятки и сотни, пока он не будет отсортирован, но как я могу переместить список ссылок несортированных элементов в корзину. Если каждое ведро представляет собой массив списков ссылок. Я пытаюсь разобраться в этом, любая помощь будет большой благодарностью заранее

ведро 0: 100 ведро 1: 11 ведро 2: 32, 122 ведро 3: 963 ведро 4: 554 ведро 5: 265 ведро 6: 626 ведро 7: 87 ведро 8: 108 ведро 9: 9

enter code here

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

typedef struct Node
{
    int data; 
    struct Node *next;
}ListNode;

ListNode *newList()
{
    ListNode *dummyHead = NULL;
    return dummyHead;
}

ListNode *insertNode(ListNode *prev, int value)
{
    ListNode *temp = malloc(sizeof(ListNode));
    if(temp == NULL)
        printf("Cannot allocate memory\n");
    temp->data = value;
    if(prev == NULL)
    {
        prev = temp;
        prev->next  = NULL;
    }
    else
    {
        temp->next = prev->next;
        prev->next = temp;
    }
    return prev;
}
ListNode *removeNode(ListNode *prev)
{
    if(prev == NULL)
    {
        return prev;
    }
    prev->next = prev->next->next;

    return prev;
}
int length(ListNode *dummyHead)
{
    ListNode *temp = head;
    int counter = 0;

    while (temp != NULL)
    {
        count++;
        temp = temp->next;
    }
    return count;
}
void printList(ListNode *head)
{
    ListNode *temp = head
    while (temp != NULL)
    {
        printf("%d\n "temp ->data);
        temp = temp->next;
    }
}
ListNode *createNode(int randNum)
{
    ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
}
int main(int argc, char **argv)
{
    int index;
    ListNode *bucket[10] = NULL;
    if (argc != 5)
    {
        printf("Entered less than 5 arguments in the command line\n");
    }
    int seed = atoi(argv[1]);
    int numRand = atoi(argv[2]);
    if (numRand <= 0)
    {
        printf("Entered zero elements in the list\n");
    }
    int high = atoi(argv[3])
    int low = atoi(argv[4])
    if (high > low && low > 0)
    {
        srand(seed);
        for (index = 0; index < numRand; index++)
        {
            int genNum = rand() % ((high - low) + 1) + lower;
            newNode = createNode(genNum);
        }
    }

}
/*
for(int i = 0; i < N ;i++) 
{ 
    //Place numbers into buckets. 
    while(list!= NULL) 
    { 
      next = list->next; 
      list->next = buckets[(list->data/n)%size];
      buckets[(list->data/n)%size] = list; 
      list = list->next; list = next; 
    } 
    //Rebuild list 
    for(int j = 0; j < size; j++) 
    { 
        while(buckets[j]!=NULL) 
        { 
            temp = buckets[j]->next; 
            buckets[j]->next = list; 
            list = buckets[j]; 
            buckets[j] = buckets[j]->next; 
            buckets[j] = temp; 
        } 
    } 
    n *=10; 
} */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...