2016-03-15 155 views
-2

我有一個.c和一個.h文件。所有的鏈表方法都是由我的教授提供的。我想通過創建一個main函數並嘗試添加到鏈接列表然後顯示鏈接列表來測試鏈表。我該怎麼做main函數?以下是我有:添加到鏈接列表

int main() { 
    linkedList* test = createLinkedList(); 
    addToLinkedList(test, value); 
    displayLinkedList(test); 
} 

我也試過這個代碼:

int main() { 
    linkedList* hello = createLinkedList(); 
    struct tnode* test = "hello"; 
    addToLinkedList(hello, test); 
    return (0); 
} 

不過,我有什麼不工作。

這裏是教授給我們的代碼:

TESTlinkedlist.c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "TESTlinkedList.h" 

/* Creates a linked list */ 
linkedList* createLinkedList() { 
    return NULL; 
} 

/* Displays the linked list */ 
void displayLinkedList(linkedList* ll) { 
    linkedList* p = ll; 

    printf("["); 
    while (p != NULL) { 
     printf(" % d " , p -> node -> c); 
     p = p -> next; 
    } 
    printf("]\n"); 
} 

/* Adds a tree node to the linked list */ 
void addToLinkedList(linkedList** ll, tnode* val) { 
    linkedList* nn = (linkedList*)malloc(sizeof(linkedList)); 
    nn -> node = val; 
    nn -> next = NULL; 

    linkedList* p = *ll; 
    if (p == NULL) { 
     p = nn; 
    } else { 
     while (p -> next != NULL) { 
      p = p -> next; 
     } 
     p -> next = nn; 
    } 
} 

TESTlinkedlist.h

/* Include Guards to prevent double inclusion with include directive */ 
#ifndef TESTLINKEDLIST_H 
#define TESTLINKEDLIST_H 

/* Typedef Structures */ 

typedef struct tnode { 
    double weight; 
    int c; 
    struct tNode* right; 
    struct tNode* left; 
    struct tNode* parent; 
} tnode; 

typedef struct ll { 
    tnode* node; 
    struct ll* next; 
} linkedList; 

/* Methods */ 

linkedList* createLinkedList(); 
void displayLinkedList(linkedList* ll); 
void addToLinkedList(linkedList** ll, tnode* val); 
void addInOrder(linkedList **ll, tnode* nn); 

#endif /* LINKEDLIST_H */ 

任何線索我怎麼可以讓一個新鏈接列表,在節點上創建並將其添加到該鏈接列表中,然後在給定方法的情況下顯示它我的教授放下?

回答

0

函數addToLinkedList和displayLinkedList需要獲取指針指針作爲其第一個參數。 因此,主要應該是這樣的:

int main() { 
    linkedList* test = createLinkedList(); 
    addToLinkedList(&test, value); 
    displayLinkedList(&test); 
} 

希望這有助於。

+0

我該如何創建tnode並將其添加到那裏? – Team43

+1

您需要創建二進制樹添加功能 –

+0

@ Team43顯示功能唯一關心的是'c'。所以你可以'malloc'節點,將所有指針設置爲NULL,將權重設置爲0,然後將'c'設置爲任何適合你的值。 – user3386109

1

您的教授給您的代碼已損壞,例如struct tnode* test = "hello";在編譯期間會導致錯誤。

拿回給他,讓他失望。當你在那裏,告訴他return是不是一個功能和he shouldn't cast malloc

在另一位教授--相關說明中,他應該檢查返回值。例如:

linkedList* nn = malloc(sizeof *nn); 
if (!nn) { 
    return; 
} 
nn -> node = val; 
nn -> next = NULL; 

有,你可能都正處於故障的另一個錯誤;有兩個入口點main,你的編譯器可能會在它們之間感到困惑。刪除其中一個。

在這兩個入口點,addToLinkedList被錯誤地使用;第一個參數的意圖是linkedList **,其中 - 正如給出的是linkedList *。也許(在你的第一個main入口點)你打算寫addToLinkedList(&test, value);。請注意附加&符號。

+0

我認爲代碼中的主要屬於OP – pm100

+0

@ pm100 OP說代碼來自教授。我認爲把他稱爲騙子是相當不敬的。此外,該入口點與他給出的入口點不同。我認爲這個切入點來自教授。 – Sebivor

+0

@ pm100考慮一下,有多少教授會寫一個這樣的代碼模塊,但沒有一個入口點來演示它?在這個過程中,這不會發生。它應該,但它不。 – Sebivor