Я пытаюсь найти имя внутри ключа. Я думаю, что это хорошо. однако его приближение не найдено. может быть, мой код что-то не так?поиск двоичного дерева поиска
if (database.retrieve(name, aData)) // both contain the match
в main()
static void retrieveItem(char *name, data& aData)
{
cout << ">>> retrieve " << name << endl << endl;
if (database.retrieve(name, aData)) // name and aData both contain the match
cout << aData << endl;
else
cout << "not found\n";
cout << endl;
}
static void removeItem(char *name)
{
cout << ">>> remove " << name << endl << endl;
if (database.remove(name))
cout << name << " removed\n";
else
cout << name << " not found\n";
cout << endl;
}
int main()
{
#ifdef _WIN32
// request memory leak report in Output Window after main returns
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
data aData;
<< "Database Of Great Computer Scientists\n\n";
database.insert(data("Ralston, Anthony"));
database.insert(data("Liang, Li"));
database.insert(data("Jones, Doug"));
database.insert(data("Goble, Colin"));
database.insert(data("Knuth, Donald"));
database.insert(data("Kay, Alan"));
database.insert(data("Von Neumann, John"));
database.insert(data("Trigoboff, Michael"));
database.insert(data("Turing, Alan"));
displayDatabase(true);
retrieveItem("Trigoboff, Michael", aData);
retrieveItem("Kaye, Danny", aData);
removeItem("Ralston, Anthony");
displayDatabase(true);
извлечения функции ...
bool BST::retrieve(const char *key, data &aData, int parent) const
{
for(int index=0; index < maxsize+1; index++)
{
if (!items[index].empty)
{
if (items[index].instanceData == key)
{
aData.setName(key);
return true; // doesn't return right away
}
}
}
}
и определены в data.cpp
bool operator== (const data& d1, const data& d2)
{
return strcmp(d1.getName(), d2.getName()) == 0;
}
так что этот бит кода внутри главной() где он говорит, что не найден, когда я чернила должны работать правильно. как имя и ADATA содержат правильное имя, которое было найдено ..
static void retrieveItem(char *name, data& aData)
{
cout << ">>> retrieve " << name << endl << endl;
if (database.retrieve(name, aData)) // name and aData both contain the match
cout << aData << endl;
else
cout << "not found\n";
cout << endl;
}
Что-то идет не так со всеми вашими изменениями (в этом и других вопросах). Сначала вы задаете подробные вопросы с кодом, затем получаете ответы и обсуждаете их, а затем удаляете весь контент, кроме половины предложения. Это делает вопрос бессмысленным, если читатели откатываются от ваших изменений. Пожалуйста, оставьте достаточно материала, чтобы новые читатели могли понять, что происходит! –
домашняя бирка? Вы не склонны видеть «базу данных великих компьютерных ученых» вне этого контекста. –