2016-12-11 12 views
1

私のコードで何が間違っているのか分かりません。キューに要素を追加する方法

最初の要素を追加しても、それ以降は機能しません。 ptrがNULLの場合、ループ中に入ります。 ヌルかどうかのチェックに問題はありますか?

struct Car *ptr = head; 
while(ptr->next != NULL) 
{ 
    ptr = ptr->next; 
} 
ptr->next = link; 

そして私はリンク - >次はそこにランダムなデータを避けるために、NULLに設定することをお勧め:

struct Car 
{ 
    int startTime; 
    char *model; 
    char *code; 
    char *location; 
    struct Car *next; 
    int deptEnterTime; 
    bool waitingForFraming; 
    bool waitingForPainting; 
    bool waitingForPolishing; 
    bool waitingForEngine; 
    bool waitingForElectronic; 
    bool waitingForIndoor; 
    bool waitingForTest; 
}; 

struct Car *head = NULL; 
void insert(int startTime, char *model, char *code) 
{ 
    /*create a link*/ 
    struct Car *link = (struct Car*) malloc(sizeof(struct Car)); 

    link->startTime= startTime; 
    link->model = model; 
    link->code = code; 
    link->waitingForFraming=true; 
    link->waitingForPainting=false; 
    link->waitingForPolishing=false; 
    link->waitingForEngine=false; 
    link->waitingForElectronic=false; 
    link->waitingForIndoor=false; 
    link->waitingForTest=false; 

    if(head == NULL) 
    { 
     head = link; 
    } 
    else 
    { 
     struct Car *ptr; 
     ptr = head->next; 

     while(ptr != NULL) 
     { 
      ptr = ptr->next; 
     } 
     ptr = link; 

    } 
} 

答えて

0

struct Car *link = (struct Car*) malloc(sizeof(struct Car)); 

link->next = NULL; 
//... 

機能のこの部分は、あなたがの最後に要素を追加しようとしている場合ことを考慮してくださいそれは

else 
{ 
    struct Car *ptr = head; 

    while(ptr->next != NULL) 
    { 
     ptr = ptr->next; 
    } 
    ptr->next = link; 

} 

のように書かれるべきでも

else 
{ 
    struct Car *ptr; 
    ptr = head->next; 

    while(ptr != NULL) 
    { 
     ptr = ptr->next; 
    } 
    ptr = link; 

} 

間違っています少なくとも2面のリストを宣言する必要があります。それ以外の場合、リストの末尾に要素を追加するのは非効率的です。

+0

ありがとうございました – hkn

+0

@hkn私はうれしいです:) –

0

あなたが使用可能な構造次のないものを最後にそれを割り当てる必要がありますが、ここにあなたがそれを行うことができる方法です:あなたが追加された要素のためにNULLにデータメンバnextを設定する必要が手始めに

.... 
link->waitingForTest=false; 
link->next=NULL; 

if(head == NULL) 
..... 
+0

私がこれをしたときにセグメンテーションエラーが発生しました – hkn