阅读 DS Malik 的“使用 C++ 的数据结构”一书。我对以下搜索功能有点困惑,(对于链表)
根据 Malik 的说法,“如果搜索项是列表中的第i个项,则 while 循环将执行 i 次。以下是书中的确切代码(不含注释)。
template <class Type>
bool unorderedLinkList<Type>::search(const Type& searchItem) const
{
nodeType<Type> *current;
bool found = false;
current = first;
while (current != NULL && !found)
if (current->info == searchItem)
found = true;
else
current = current->link;
return found;
}
一旦找到该项目,这个循环真的会停止吗?
while (current != NULL && !found)
我的直觉告诉我它将继续使用那些 && 运算符,但我可能错了。这只是书中的错字,还是我遗漏了什么?
另一个问题是我的编译器抱怨的以下行。
current = first; //error 'first' was not declared in this scope
所以要修复它,我将其替换为
current = searchItem.first;
编译器不再抱怨,但它是否从父类访问了正确的受保护成员?(unorderedLinkList 继承自linkedListType 父类,具有受保护的nodeType<Type> *first
成员)
编辑:更多代码:D
template <class Type>
struct nodeType
{
Type info;
nodeType<Type> *link;
};
template <class Type>
class linkedListType
{
public: //some removed for space
virtual bool search(const Type& searchItem) const = 0;
protected:
int count;
nodeType<Type> *first;
nodeType<Type> *last;
private:
void copyList(const linkedListType<Type>& otherList);
//function to make a copy of otherlist and assign to this list
};
编辑:派生类
template <class Type>
class unorderedLinkedList: public linkedListType<Type>
{
public:
bool search(const Type& searchItem) const;
}
编辑:VS Express 编译我的代码,但这个站点不会。请帮忙?T_T http://ideone.com/SN2R99