文字列のリンクされたリストを順番に検索する検索機能があります。この Find 関数は、文字列を検索して返します。この Find 関数を使用して、リンクされたリストから文字列を削除する remove 関数もあります。私の機能は両方とも機能します。ただし、リンクされたリストを検索する別の方法をテストしようとしており、リンクされたリストで二分検索を実行できるかどうか疑問に思っています。私のコードは次のとおりです。
探す
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;
}
私の機能は両方とも完全に機能します。リンクされたリストを検索する方法の例を誰かに見せてもらえないかと思っていますが、順次検索の代わりに、学習目的で二分検索がどのように機能するかを確認したいと思います。助言がありますか?ありがとう!