Я ищу, чтобы создать способ вставки структуры в порядке возрастания по PID.Создание упорядоченного связанного списка в C
Я проверял другие темы, и я написал что-то, как это упоминали другие, но я получаю ошибки при компиляции относительно Next_PCB
и типа конфликтов.
struct PCB
{
struct PCB *Next_PCB;
int PID;
};
struct PCB *ptr, *tmp;
void insert_ordered (struct PCB *, struct PCB *);
void print_list(struct PCB *);
main()
{
int num_structs, i;
ptr = (struct PCB *) malloc (sizeof (struct PCB));
num_structs = 10 + (rand() % 10);
for (i = 0; i < num_structs; i++)
{
tmp = (struct PCB *) malloc (sizeof(struct PCB));
tmp->PID = rand() % 20;
tmp->Next_PCB = NULL;
insert_ordered(ptr, tmp);
}
print_list(ptr);
}
void insert_ordered (struct PCB *Head, struct PCB *Add)
{
struct PCB* new;
if(*Head == NULL || *Head->PID >= Add->PID)
{
Add->Next_PCB = *Head;
*Head = Add;
}
else
{
new = *Head;
while (new ->Next_PCB!=NULL && new->Next_PCB->PID < Add -> PID)
{
new = new->Next_PCB;
}
Add->Next_PCB = new->Next_PCB;
new->Next_PCB = Add;
}
}
Функция insert_ordered
где проблема происходит, и то, как я работаю с структурами является то, что вызывает проблемы, так что я интересно, что я делаю неправильно в отношении самого метода, а также структуры.
Как правило, это очень плохая идея для сортировки связанных списков. Наиболее эффективным вы можете это сделать в O (n^2), тогда как копирование данных в массив, сортировка массива и копирование обратно в список - O (n * log (n)). –