2015-05-03 2 views
-5

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

все, что я вижу, это то, что он, похоже, является связанным списком узлов с данными из «значений»? Но я не знаю, хотя, просто проиграл.

#include <stdio.h> 
    #include "sNode.h" 

    int main() 
    { 
     int i; 
     int rV = 0; 
     List l = NULL; 
     char* input[] = { "06", "24", "3" }; 
     sNode *s, *t; 

     for(i=0; i<3; ++i) 
     { 
      t = (sNode*)malloc(sizeof(sNode)); 
      if(t == NULL) 
      { 
      fprintf(stderr, "Couldn't get memory for a node! Exiting."); 
      rV = 1; 
      break; 
      } 
      t->data = input[i]; 
      t->next = l; 
      l = t; 
     } 


     s = l; 
     while(s != NULL) 
     { 
      t = s->next; 
      free(s); 
      s = t; 
     } 

     return rV; 
} 
+0

Вы должны опубликовать весь свой код, включая все '# includes' и определения таких вещей, как' sNode' и 'List'. Кроме того, было бы хорошо показать, что вы на самом деле пытались понять код самостоятельно. Объясните свой мыслительный процесс и место, где вы застряли, чтобы мы могли помочь вам перейти к следующему шагу. –

+0

Мои извинения ... с тех пор было отредактировано. Кроме того, все, что я вижу, похоже на то, что это, похоже, связанный список узлов с данными из «значений»? Но я не знаю, хотя, просто проиграл. – DtownDom

+3

'программа не запускается 'Тогда, по определению, он также не создает ни одного списка. 'У меня проблемы с поиском этой программы. Какая проблема? Что, в частности, похоже на проблему? –

ответ

0

л указывает на голову связанного списка. Так л присваивается значение NULL, чтобы начать с, то есть пустой связанный список.

в первой итерации for-loop создается узел и назначается значение «06». l устанавливается в poin t к вновь созданному узлу. Так у вас есть:

л ---> («06», NULL)

Во второй итерации для цикла узел создается и присваивается значение «24». l установлен для указания на вновь созданный узел. Так у вас есть:

л ---> ("24", следующая = ---) ---> ("06", рядом = NULL)

В третьей итерации для цикла создается узел и назначается значение «3». l установлен для указания на вновь созданный узел. Итак, у вас есть:

l ---> ("3", next = ---) ---> ("24", next = ---) ---> ("06", next = NULL)

В конце у вас есть связанный список, в котором элементы вставлены спереди.

0

Как отследить объекты программы

Здесь мы смотрим на l, потому что это типа List, рассматриваемого объекта. Линии, где l является изменял

int main() 
{ 
     List l = NULL; 
     for(i=0; i<3; ++i) 
     { 
       l = t; 
     } 
} 

Оказывается, что t функция назначается l так мы смотрим на t:

int main() 
{ 
    List l = NULL; 
    sNode *s, *t; 

    for(i=0; i<3; ++i) 
    { 
      t = (sNode*)malloc(sizeof(sNode)); 
      if(t == NULL) 
      { 
        fprintf(stderr, "Couldn't get memory for a node! Exiting."); 
        rV = 1; 
        break; 
      } 
      t->data = input[i]; 
      t->next = l; 
      l = t; 
    } 
    while(s != NULL) 
    { 
      t = s->next; 
    } 

Теперь более понятно, что происходит. malloc выделяет динамическую память размером sNode по адресу t. По http://www.cplusplus.com/reference/iterator/next/, t->next указывает на следующий элемент (это время повторно назначен l через t->next = l Продолжайте делать это;.. Подсказка вы смотрите на s следующий поскольку s в настоящее время изменяется Представляется, что данные члены t в настоящее время повторно назначены, в частности, теперь он равен вход в &input + sizeof(i).