按顺序将节点放在链接列表中

时间:2014-02-13 09:35:40

标签: c++ linked-list insertion

所以我无法为我的生活做的事情是将这个新节点按其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

1 个答案:

答案 0 :(得分:0)

不是仅将新节点放在freelist的末尾,而是检查先前的节点end_byte与新节点start_byte以及新节点{{1与下一个节点end_byte进行比较。这样,列表保持排序,并且很容易组合连续内存区域的节点。