2017-06-10 13 views
-1

連絡先をリストに追加して印刷するとリンクリストに問題があり、それを印刷すると、最初と2番目のリストではなく2番目のリストが印刷されます。私が間違っていることを教えてください。おかげさまで 電話帳リンクされたリスト

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#define true 1 
#define false 0 

typedef int boolean; 
typedef int Position; 
typedef int Count; 

typedef struct node_def { 
    int area_code; 
    char name[30]; 
    char phone_number[8]; 
    struct mode_def *next; 
} Node; 

typedef struct { 
    Position currentPos; 
    Count nodeCount; 
    Node *head; 
    Node *current; 
    Node *tail; 
} ListADT; 

void initList(ListADT*); 
boolean checkEmpty(ListADT*); 
void addList(ListADT*, int, char*, char*); 
void printList(ListADT*); 

int main(void) { 
    ListADT phoneList; 
    initList(&phoneList); 
    Node *firstNode; 
    addList(&phoneList, 416, "Sam", "1234567"); 
    addList(&phoneList, 416, "Bob", "7654321"); 
    firstNode-> next; 
    printList(&phoneList); 
    printList(&phoneList); 
    return 0; 
} 

void initList(ListADT* list){ 
    list->currentPos = -1; 
    list->nodeCount = 0; 
    list->head = NULL; 
    list->tail = NULL; 
} 

boolean checkEmpty(ListADT* list){ 
    return list->nodeCount == 0 ? true : false; 
} 

void addList(ListADT* list, int areaCode, char* name, char* phoneNum){ 
    Node* newNode = malloc(sizeof(Node)); 
    assert(newNode); 
    newNode->area_code = areaCode; 
    strcpy(newNode->name, name); 
    strcpy(newNode->phone_number, phoneNum); 
    newNode->next = NULL; 
    if(list->nodeCount == 0) { 
     list->head = newNode; 
     list->tail = newNode; 
     list->currentPos = 0; 
     list->nodeCount = 1; 
    } 
    else { 
     list->tail = newNode; 
     list->current = list->tail; 
     list->nodeCount++; 
     list->currentPos = list->nodeCount -1; 
    } 
} 

void printList(ListADT* list){ 
    if(!checkEmpty(list)){ 
     Node* newNode = list->head; 
     printf("The name is %s\n",newNode->name); 
     printf("The phone number is %i-%s\n",newNode->area_code,newNode->phone_number); 
    }else 
    printf("The list is empty.\n"); 
} 
+0

'がprintlist(&PhoneListとして)を行わない印刷する場合、すなわち、nextを通じてノードを横断し、リンクされたリストが、リンクされていないノード

  • を取得することはありません; '同じことを二度やっている。あなたは別の結果を期待していますか? – Yunnosch

  • 答えて

    1

    害を意味しないが、現在のコードに関するあなたの質問に基づいて、私はあなたがあなた自身の抽象データ型を書き込む前に、特にC++でのプログラミングでは、プログラミングにいくつかのより多くの経験を取得する必要があるとします。 実際には、半分にしか行われていないことがたくさんあります。実際には、「最初の要素を正確に印刷する以外に何もしない私の関数は、なぜこの関数を2回呼び出すと同じ要素を2回出力するのですか?

    とにかく、いくつかのヒント:struct mode_def *next

    • タイプミスは、struct node_def *nextでなければなりません。
    • nextが実際にどこかに設定されていることを確認してください。 ;がprintlist(&PhoneListとして)、そうでない場合、あなたはwhile(node!=NULL) { ...; node=node->next; }
    • firstNode-> next;のようなものは、単に何も
    関連する問題