Member 13994200 Ответов: 1

Как я могу искать информацию с помощью linklist


Во-первых, этот вопрос исходит из моего задания. В задании 1 я должен был использовать массивы для хранения информации из 4 файлов в соответствующие структуры/классы.
В задании 2 мне нужно сделать то же самое, только на этот раз используя список ссылок.

Проблема в том, что в Asg1 я искал определенную информацию в файле 1(скажем, идентификатор, введенный пользователем) и искал соответствующую информацию, используя этот идентификатор в файле 2(идентификатор, имя, возраст и т. д.).
Теперь с помощью массивов сделать это действительно просто, но как мне это сделать с помощью списка ссылок? Я понимаю основные-умеренные концепции списков ссылок.

Любое решение, такое как теория или коды, будет оценено по достоинству.

Что я уже пробовал:

Поиск в Google по понятию link-list. Не смог найти никакой релевантной информации.

1 Ответов

Рейтинг:
8

Rick York

Чтобы выполнить поиск по связанному списку, вы должны пройти по нему. Вот фрагмент кода, который будет проходить через список. Он предполагает, что указатель списка направлен в начало списка, и существует метод, позволяющий получить указатель на следующую запись в списке.

ListItem * p = pList;
while( p )
{
   // here you compare p's data to the item you are searching for

   p = p->Next();
}
Обычно каждая запись списка имеет указатель на следующую запись (ссылку), поэтому следующий метод просто вернет ее или вы можете изменить его, чтобы назначить указатель на p. Если ваше сравнение находит совпадение, то у вас есть указатель на элемент списка для использования. Обычная вещь, которую нужно сделать, - это сделать функцию поиска, чтобы найти текстовую строку в списке. Вот пример одного из них, где ListItem имеет указатель на текстовую строку, а указатель на следующий элемент называется pNext :
ListItem * FindText( ListItem *pList, const char *txt )
{
    ListItem * p = pList;
    while( p )
    {
       if( strcmp( p->Text, txt ) == 0 )
           break;   // found it so stop traversing the list
       p = p->pNext;
    }
    return p;  // points to item with matching text or null if none
}


Member 13994200

Хорошо, я думаю, что получил его. Спасибо!

Maciej Los

Молодец!