Вам нужно написать несколько функций:
- Написать функцию для создания нового списка. Ваша функция должна создать фиктивный головной узел для представления пустого списка. ListNode newList (void); / возвращает заголовок нового пустого списка * /
- Запись функций для вставки элементов в список и удаления элементов из списка (Примечание. Это рекомендуемые функции. У вас могут быть дополнительные функции или другие прототипы функций, чем те, которые показаны) ListNode * removeNode (ListNode * prev); / * удалить узел после prev из списка и вернуть указатель на удаленный узел * / ListNode * insertNode (ListNode prev, данные SomeDataType); / вставляет новый узел с данными поля данных после prev и возвращает указатель на новый узел * /
- Запись функций для подсчета количества элементов в списке без заголовка и его печати: длина 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;
} */