2013-05-23 2 views
1

У меня есть проблема с этой функцией. Когда я это называю, клиенты должны печататься от последнего (хвоста) до первого (главы).Печать единственного связанного списка

Проблема в том, что я хочу напечатать их с первого (головного) до последнего (хвоста). Все, что я попробовал, либо привело к ошибке сегментации, либо печатает только первого клиента.

Обратите внимание, что программа касается банка. У меня есть очередь клиентов, которые я хочу напечатать в порядке.

Спасибо заранее!

void printAll(clientData* tail) { 
    clientData *current; 
    current = tail; 
    if (current == NULL) { 
     printf("There is no client in queue\n"); 
     return ; 
    } 
    while (current != NULL) { 
     printf("%s %s %d/%d/%d %s %s %s %s\n", 
      current->firstname, 
      current->lastname, 
      current->birthday.day, 
      current->birthday.month, 
      current->birthday.year, 
      current->bankaccount, 
      current->telephone, 
      current->email, 
      current->bankcommand); 

     current = current->next; 
    } 
    return; 
} 
+0

Erm ... У вас есть (отдельно) связанный список. Вы сейчас начинаете с головы (первый узел) и обходите его. –

+1

Этот вопрос должен быть улучшен. По крайней мере, вы должны описать свой тип даты 'clientData' и как создается список – dunadar

ответ

4

Что вам нужно, это стек. Ваша система автоматически обеспечивает вас, когда вы вызываете функцию рекурсивно:

void printAll(clientData* current) 
{ 
    if (current->next != NULL) { 
     printAll(current->next); 
    } 
    printf("%s %s %d/%d/%d %s %s %s %s\n", current->firstname,current->lastname,current->birthday.day,current->birthday.month,current->birthday.year,current->bankaccount,current->telephone,current->email,current->bankcommand); 
} 
+0

Ну, я попробовал, но он только печатает меня первый –

+0

В этом случае единственное объяснение, которое я вижу, это то, что current-> next is NULL для хвоста вашего списка. Попробуйте удалить if (просто вызовите 'printAll (current-> next);' независимо) и посмотрите, есть ли у вас segfault. –

+0

Я попробовал, он напечатал первый клиент, а затем разделил –

Смежные вопросы