C中的结构查找元素大于某个变量

Structures in C finding element larger than certain varriable

你好,我正在尝试使用 C 中的数据结构来寻找 2007 年后价格最高的元素,尝试了所有各种语句,但我似乎无法做到。这是一段代码。有人可以对我的问题提出建议吗?

LIST *sortKM1(LIST *pFirst)
{
    LIST *b = pFirst;
    LIST *p = pFirst;
    LIST *b1, *bus1 = NULL;

    for (p = pFirst; p != NULL; p = p->pNext)
    {

            if ((b->body.price) < (p->body.price)&& (p->body.year)>2007))
            {
                b = p;
            }

    }
    b1 = newElement(bus1, b->body);
    return b1;
}

if ((b->body.price) < (p->body.price)&& (p->body.year)>2007)) 你最后有一个额外的支架。这会是个问题吗?你可能需要: if ((b->body.price) < (p->body.price)&& (p->body.year)>2007)

这种简化应该可以解决以下问题,即如果 none 的记录年份 > 2007,则答案不正确,并且,如果 first记录是<= 2007但是是最高价,那也是不正确的。此外,您不需要创建新记录:只需 return 指向最佳记录的指针。

如果没有找到符合年份标准的记录,NULL 被 returned,如果成功则记录指针被 returned。

LIST *sortKM1(LIST *pFirst) {
    LIST *b = NULL, *p;
    int price = -1;              // match the var type to the LIST struct

    for (p = pFirst; p != NULL; p = p->pNext) 
    {
        if (price < p->body.price && p->body.year > 2007)
        {
            price = p->body.price;
            b = p;
        }
    }
    return b;
}

详细说明评论: 假设pFirst->body.price是整个价格最高的 数据结构,但 pFirst->body.year 是 2005。 因为你最初设置 b = pFirst, 你永远找不到 2007 年之后的最高价,因为 none 其中将超过 pFirst->body.price。 相反,您最终会说 pFirst 是 2007 年之后的记录 价格最高,这简直是错误的。

要解决此问题,我建议您以某种方式指出最初 没有列表的条目被选为"highest price from 2007"。 例如,您最初可以设置 b = NULL

这也意味着你必须在循环中有一些额外的逻辑 处理2007年以后仍未查到记录的情况, 和循环外的逻辑来处理没有 2007 年之后的记录在整个列表中。 循环外的逻辑可能就像返回 NULL 一样简单, 但来电者必须准备好接收该答复。

如果看起来像这样,循环内部的逻辑可能会更简单:

for (p = pFirst; p != NULL; p = p->pNext)
{
  if (p->body.year > 2007)
  {
    if( ... ) // <-- replace '...' with necessary logic
    {
      b = p;
    }
  }
}

如果变量的名字能给出 更好地了解如何实际使用它们,例如 highest_found 而不是 b.