我有一个Find函数,可以按顺序搜索字符串的链接列表。此Find函数查找字符串并返回它。我还有一个删除函数,它使用此Find函数并从链表中删除字符串。我的两个功能都有效。但是,我试图测试另一种搜索链表的方法,我想知道是否有可能在链表中进行二分搜索。 继承我的代码:
查找
StringList::StringListNode *StringList::find(const string &s) //basic search function
{
StringListNode *sp = pTop; // Search
while (sp != 0 && sp->data != s)
sp = sp->pNext;
return sp;
}
这是删除功能:
void StringList::remove(string s)
{
StringListNode *curr = this->find(s);
if (curr->pPrev != 0)
{
curr->pPrev->pNext = curr->pNext;
}
if (curr->pNext != 0)
{
curr->pNext->pPrev = curr->pPrev;
}
if (pTop == curr)
{
pTop = curr->pNext;
}
if (pBottom == curr)
{
pBottom = curr->pPrev;
}
我的两个功能都很完美。我只是想知道是否有人可以向我展示如何搜索链表而不是顺序搜索,我想看看二分搜索如何用于学习目的。有什么建议?谢谢!