2016-03-15 169 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