将节点按顺序放入链表中

Putting nodes in linked list in order

本文关键字:链表 顺序 节点      更新时间:2023-10-16

所以我一生都无法做的是按照它们的startbyteendbytes顺序将这个新节点放入链表中。然后我需要它来查看节点是否彼此相邻,以及它们是否相邻。将它们变成一个大节点。

这是我拥有的一些代码,可以从第一个列表中释放内存,但是在创建新节点后,我无法找到一种有效的方法,我已经尝试了多种不同的东西。

void release_memory(const int job)
{
    ALLOCPTR t = alloclist;
    FREEPTR f = freelist;
    ALLOCPTR prev = alloclist;
    while(t!=NULL)
    {           
        if(t->id == job )
        {               
            if(t==alloclist)
                {
                    alloclist=alloclist->next;
                }
            else 
                {
                    prev->next = t->next;
                }
            FREEPTR newfreenode = new FREE_NODE;
            newfreenode->start_byte = t->start_byte;
            newfreenode->end_byte = t->end_byte;
            newfreenode->size = t->size;
            while(f->next!=NULL)
            {
                f=f->next;//
            }
            f->next = newfreenode;
            checkIfFreeTogether();                                      
        }
        prev=t;
        t=t->next;          
}

我需要做的一个例子是这个

before any memory freeing
JOB      MEMORY 
1        1-49
2        50-99
3        100-199 
After freeing 2 and 3
job        memory
1          1-49
FREE      50-99
FREE      100-199
After  creating one big free node out of the two 
job      memory 
1        1-49
FREE    50-199

不要只把新节点放在freelist的末尾,而是检查以前的节点end_byte与新节点start_byte的比较,以及新节点end_byte与下一个节点start_byte的比较。这样,列表将保持排序,并且可以轻松组合连续内存区域的节点。