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
.
你好,我正在尝试使用 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
.