【发布时间】:2013-02-27 09:09:45
【问题描述】:
请看下图
这就是我的实现方式
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 表示链表中的链接。我怀疑这是否也是“链接”类。 Next 是指向列表中下一个武器的指针。如果它影响到上面的代码,我在这里发布。
insert()方法里面怎么处理?除此之外,我的链接列表是否正确?无论如何,第一次使用链接列表的模板。请帮忙!
注意:不允许使用内置数据结构。这就是我发布课程图的原因。如果我需要内置数据结构支持,那么我不会问如何自己构建代码。
【问题讨论】:
-
为什么不使用众多可用的链表实现之一?
-
如果可能,请使用
std::list或其他标准库容器,除非有充分的理由不这样做。 -
@ddriver: nono,需要我自己做
-
@MarkGarcia:不,需要我自己做
-
您的插入例程不采用 T* 参数。我认为我最紧迫的问题是:Link 对象应该由客户端代码还是由 LinkedList 实例化?
标签: c++ visual-studio-2010 templates linked-list