创建链接列表作为模板:我的实现是否正确?

时间:2013-02-27 09:09:46

标签: c++ visual-studio-2010 templates linked-list

请查看下图

enter image description here

这就是我实施它的方式

template <typename T>

class LinkedList
{

    struct Link {
    T data;
    struct Link *next;

    public:
    T *first;
  };



LinkedList::LinkedList(void)
{
    first = 0;
}


LinkedList::~LinkedList(void)
{
}

bool LinkedList::IsEmpty()
{
    return (first==0);
}

void LinkedList::Insert(Link *newLink)
{
    newLink->next = first;
    first = newLink;
}

void LinkedList::Display()
{
    Link *current = first;

    while(current!=0)
    {
        current->Display();
        current = current->next;
    }
}

T *LinkedList::Find(int value)
{
    Link *current = first;

    while(current->GetData()!=value)
    {
        if(current->next==0)
        {
            return 0;
        }
        else
        {
            current = current->next;
        }
    }

    return current;
}

T *LinkedList::Delete(const int id)
{
    Link *current = first;
    Link *previous = first;

    while(current->GetData()!=id)
    {
        if(current->next==0)
        {
            return 0;
        }
        else
        {
            previous = current;
            current = current->next;
        }
    }

    if(current==first)
    {
        first = first->next;
    }
    else
    {
        previous->next = current->next;
    }

    return current;
}
};

我对我的实施感到不舒服。特别是,我不知道使用insert()类型在T方法中要做什么。

以下是另一个类的图表,它的next指针是Weapons表示链表中的链接。我怀疑这是否也是“链接”类。接下来是指向列表中下一个武器的指针。如果它影响上面的代码,我在这里发布。

enter image description here

如何处理insert()方法?除此之外,我的链接列表是否正确?首次使用链接列表模板。请帮忙!

注意:不允许在数据结构中内置。这就是我发布课程图的原因。如果我需要在数据结构支持中建立,那我就不会问我如何按自己的方式构建代码。

1 个答案:

答案 0 :(得分:0)

我宁愿回答的问题:

我的特殊问题/运动是......

如何使用std::list或其他标准库容器来解决我的问题,这些容器可能会使用更少的行,更容易理解,更高效并帮助我实现程序员更多?

我努力不回答的未说出口的问题:

我的代码出了什么问题?

我认为你实际问的问题是:

如何修复insert()方法?

仅回答上一个问题:

您似乎正在尝试将新链接附加到列表的前面。从概念上讲,我会把它附加到列表的后面,但是嘿,每个都是他自己的。

类似于:在您的课程中,first的类型为T *,其中T可能是实现GetData()的自定义类。因此first指向T,它应该指向Link,指向T

然后你的insert()方法更有意义。

但是,如果没有可编译的代码片段(具有已定义的预测输出),则很难知道您的代码是否正确。至少对于标准库,您总是可以假设如果出现问题,它不在链表实现中。

你是否需要自己做,因为这是家庭作业?