【发布时间】:2020-04-14 03:20:23
【问题描述】:
我有以下 *addEngine 函数将元素添加到我的链表中,我想按年份升序排序。我不能更改函数参数。
它不像我想象的那样工作。为什么是
a = AddEngine ( a, createEngine ( "TDI 1.9", 2015) );
在 main 中列出时不包括在内?
typedef struct TEngine
{
struct TEngine *m_Next;
int m_Year;
char m_Type [ TYPE_MAX ];
} TENGINE;
typedef struct TArchive
{
struct TArchive *m_Next;
TENGINE *m_Engines;
} TARCHIVE;
TARCHIVE *addEngine ( TARCHIVE *list, TENGINE *engine)
{
TARCHIVE *res = (TARCHIVE*) malloc(sizeof(*res));
if ( list == NULL )
{
res -> m_Next = NULL;
return res;
}
int currentYear = list -> m_Engnes -> m_Year;
if ( currentYear > engine -> m_Year )
{
TARCHIVE *prev = list;
TARCHIVE *current = list -> m_Next;
while ( current != NULL )
{
if ( currentYear >= engine -> m_Year )
{
res -> m_Next = prev -> m_Next;
prev -> m_Next = res;
return list;
}
prev = current;
current = current -> m_Next;
}
prev -> m_Next = res;
res -> m_Next = NULL;
}
return 0;
}
int main ( void )
{
TARCHIVE *a, *b;
b = a = NULL;
a = AddEngine ( a, createEngine ( "TDI 1.9", 2015) );
a = AddEngine ( a, createEngine ( "TDI 1.8", 3001 ) );
a = AddEngine ( a, createEngine ( "TSI 1.2", 1999 ) );
a = AddEngine ( a, createEngine ( "TDI 2.0", 2108 ) );
a = AddEngine ( a, createEngine ( "TDI 1.9", 2005) );
b = a = AddEngine ( a, createEngine ( "TDI 1.8", 1010 ) );
a = AddEngine ( a, createEngine ( "TDI 1.9", 2025) );
a = AddEngine ( a, createEngine ( "TDI 1.8", 2038 ) );
while ( b )
{
printf ("%s", b -> m_Engines -> m_Type);
b = b -> m_Next;``
}
【问题讨论】:
-
用户 Aaron7 之前问过确切的问题。似乎您使用了多个用户名。无论如何,此代码仍然不完整,无法为您提供帮助。我建议您使用调试器并单步执行。
-
为了有一个最小的可重现示例,您必须至少提供
TARCHIVE和TENGINE结构和一个简单的 main,您可以在其中调用 add 函数。 ps:并解释2015 issue。 -
你用三个参数调用
AddEnding,但它只需要两个?!请提供一个最小的、可运行的问题演示。 -
对不起,我不小心复制了。
-
样式问题:点
.和箭头->运算符绑定非常紧密,不应与它们周围的空格一起使用。写res -> m_Next不是惯用的C;使用res->m_Next。
标签: c sorting pointers struct linked-list