结构链接到链表

时间:2011-10-04 12:12:27

标签: c++ data-structures

我是c ++的新手,我正在尝试将我在python中创建的程序移植到c ++。我有一个结构,它是一个包含部件列表的链表。这些部件中的每一个都包含一个或多个部件。所以我试图创建两个结构,其中一个结构链接到另一个结构。

但我似乎没有将list_part链接到component_list。

struct list_part {
    char partname[100];
    int parttype;
    component_list * comp;
    list_part * next;
};

struct component_list {
    char compname[100];
    component_list * next;
};

我使用以下函数将部件添加到列表的底部。

void addpart(char partname[], int parttype, component_list *newcomp) {
    struct list_part *temppart;
    struct list_part *currentpart;

    temppart = (struct list_part *)malloc(sizeof(struct list_part));
    strcpy_s(temppart->partname,partname);
    temppart->parttype = parttype;
    temppart->comp = newcomp;

    currentpart = head;

    if (head == NULL) {
        head = temppart;
        head->next = NULL;
    } else {
        while (currentpart->next != NULL) {
            currentpart = currentpart->next;
        }
        temppart->next = NULL;
        currentpart->next = temppart;
    }
}

将组件添加到列表中的类似功能。

void addcomp(char compname[]) { 
    struct component_list *tempcomp;
    struct component_list *currentcomp;

    tempcomp = (struct component_list *)malloc(sizeof(struct list_part));
    strcpy_s(tempcomp->compname,compname);

    currentcomp = newcomp;

    if (currentcomp == NULL) {
        currentcomp = tempcomp;
        currentcomp->next = NULL;
    } else {
        while (currentcomp->next != NULL) {
            currentcomp = currentcomp->next;
        }

        tempcomp->next = NULL;
        currentcomp->next = tempcomp;
    }
}

当零件中的第一个零件存在时,我尝试添加它。

struct component_list *newcomp = NULL;
strcpy_s(compname,temp.c_str());
addcomp(compname);

以及我计划用这些命令添加的其他组件

strcpy_s(compname,temp.c_str());
addcomp(compname);

最后,这是作为

的一部分添加的
addpart(partname,fluidname, parttype, newcomp);

当我这样做时,newcomp只返回00000000,但我需要它返回一个指向列表的指针,该指针包含该部分的组件。我不知道如何真正做到这一点,我已经习惯了动态语言,这不是一个问题。我认为这是解决这个问题的最好方法,但我对其他解决方案的建议非常开放。因为数据结构是我非常新鲜的东西。

2 个答案:

答案 0 :(得分:6)

由于您愿意接受建议,我认为最好的建议是您应该使用 std::list而不是您自己的链接列表实现。

std :: list 是C ++标准库提供的随时可用的STL容器,它总是比您编写的任何列表实现更高效。

答案 1 :(得分:0)

你在addcomp函数中有2个大错误,这应该有效:(也移动了一些东西)

void addcomp(char compname[]) { 
    struct component_list *tempcomp;
    struct component_list *currentcomp;

    tempcomp = (struct component_list *)malloc(sizeof(struct component_list/*FIX 1*/));
    strcpy_s(tempcomp->compname,compname);
    tempcomp->next = NULL; /*Better do it here*/

    if (newcomp == NULL) {
        newcomp = tempcomp;/*FIX 2*/
    } else {
        currentcomp = newcomp; /*Better do it here*/
        while (currentcomp->next != NULL) {
            currentcomp = currentcomp->next;
        }
        currentcomp->next = tempcomp;
    }
}