我对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;
答案 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;
}