【问题标题】:Putting nodes in linked list in order将节点按顺序放入链表中
【发布时间】:2014-03-12 02:15:04
【问题描述】:

所以我这辈子没能做的就是将这个新节点按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

【问题讨论】:

  • 你能举例说明你想要达到的目标吗?我知道您正在尝试对列表的节点和 MSB、LSB 或节点值的所有字节做一些事情。但不知道是什么...
  • 如果freelistNULL 怎么办?

标签: c++ linked-list insertion


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多