C ++ largest_free节点函数段错链接列表

时间:2014-02-09 22:00:40

标签: c++ linked-list

我对c ++很新,我编译代码时似乎遇到了段错误。虽然当我注释掉最大= tmp->大小时;最大= m->尺寸;它汇编。我无法弄清楚为什么会导致段错误。此外,如果任何人对代码有任何建议,以及如何找到链接列表中最棒的节点,那将是非常棒的!

int largest_free(void)
     {
    FREEPTR tmp = freelist;
    FREEPTR m = freelist -> next;
    int largest = 0; 


    while(tmp!=NULL)
    {

        if(tmp->size > m->size)
        {
                largest=tmp->size;
        }
        else
        {
                largest=m->size;
        }

    tmp = tmp->next;
    }
    cout << largest << endl;
return largest;

1 个答案:

答案 0 :(得分:0)

您应该将最大值与所有元素进行比较,并将其设置为当前元素。最大值应始终设置为最大值和当前元素的最大值。

#include <limits.h>
#include <assert.h>
...
int largest_free(void)
{
    FREEPTR tmp = freelist;
    FREEPTR m = freelist -> next;

    // one option:
    //int largest = INT_MIN; // initialize largest to the lowest possible value. For int that is defined in the limits header as INT_MIN to -32767

    // or:
    assert(tmp);
    int largest = tmp->size; // init with first value.


    while(tmp!=NULL)
    {

        if(tmp->size > largest)
        {
                largest=tmp->size;
        }

        tmp = tmp->next;
    }
    cout << largest << endl;
    return largest;
 }

考虑你对&#34;最大&#34;的定义对于空列表。如果您从未有空列表,则可以选择列表的第一个元素而不是MIN_INT。取决于要求。

使用像

这样的宏
#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))

你可以缩短while循环次数:

    while(tmp!=NULL)
    {
        largest = MAX(largest, tmp->size);            
        tmp = tmp->next;
    }