我有一个 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;
}
我的两个功能都可以完美运行。我只是想知道是否有人可以向我展示如何搜索链表的示例,而不是顺序搜索,我想看看二分搜索如何用于学习目的。有什么建议么?谢谢!