【发布时间】:2017-05-07 04:27:39
【问题描述】:
我有一个我命名为乘客的结构,它按字母顺序排序,我将其复制到一个与结构具有相同元素的链表中。 颠倒列表元素顺序的最佳算法是什么,以便我可以轻松地按字母顺序打印出来?现在,如果遇到的第一个值为 NULL,我的打印当然不起作用
typedef struct
{
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
}PASSENGERS;
typedef struct list1
{
char fullname[40];
struct list1 *next;
}LIST1;
int main()
{
selectsortnm(passenger); /*A function I use to sort alphabetically*/
LIST1 *list1, *start=NULL;
int i=0;
while (strcmp(passenger[i].fullname,"\0")!=0);
{
list1 = (LIST1 *) malloc (sizeof(LIST1));
list1->next = NULL;
strcpy(list1->fullname,passenger[i].fullname);
if (start ==NULL)
{
start = list1;
i++;
}
else
{
list1->next = start;
start = list1;
i++;
}
}
//Recursive algorithm
LIST1 *current = list1;
while (current !=NULL)
{
printf("%s",current->fullname);
current = current->next;
}
}
【问题讨论】:
-
你的问题不清楚。还有什么是 LIST1 ?请分享易于理解的代码。
-
我们需要一个linked-list.stackoverflow.com,这样我们就可以过滤掉一半的问题。
-
使用双向链表可以通过向后遍历来解决问题。此外(这更像是解决方法)您可以在创建列表时向后遍历
passengers数组,但您需要 2 个循环:1 获取最后一个索引(最后一个记录,其 fullname 不是 @ 987654323@),第二个:从前一个循环找到的索引循环到0。嗯,但这两种方法都没有递归性。 -
感谢大家的cmets,我对此很陌生,但没有任何借口..
-
//Recursive algorithm之后的代码不是递归的。
标签: c algorithm linked-list