#c
#c
Вопрос:
название
сыгранных игр
, оценка
Глубина
5
540 (head)
Питер
34
455
Avijit
2
430
Pekka
4
310 (хвост)
Для приведенного выше связанного списка списка игроков я хочу отсортировать список в порядке возрастания, когда Avijit получает более высокий балл, чем Peter. Итак, это операция сдвига в связанном списке. Кто-нибудь может помочь мне выяснить проблему в приведенном ниже коде для выполнения этой операции. И какое-либо решение? Спасибо.
void Player::update_statistics(int last_game_point)
{
player_ptr currPtr = head; // Moving pointer
player_ptr prevPtr = NULL; // Pointer to node before *currPtr
//player_ptr head; // class variable in Player class
//player_ptr selected_player; // class variable in Player class
//player_ptr previous_player; // class variable in Player class
// update selected player's data
cout<< (selected_player->played_games); // increase by 1 for last game
selected_player->total_point=(selected_player->total_point) last_game_point;
if ((selected_player!=head) amp;amp; (previous_player->total_point < selected_player->total_point)){
previous_player->link = selected_player->link;
// search for appropriate position
while (currPtr->total_point > selected_player->total_point){
prevPtr = currPtr;
currPtr = currPtr->link;
}
if (currPtr==head)
selected_player->link=head;
head=selected_player->link;
}
else {
previous_player->link=selected_player;
selected_player->link=currPtr;
}
}
Комментарии:
1. Это домашнее задание? Если да, пожалуйста, отредактируйте свой вопрос, чтобы добавить тег
homework
.2. нет, это не домашнее задание! я пытаюсь сам разработать игру.
Ответ №1:
Я думаю, вы хотите
else {
previous_player->link=selected_player;
selected_player->link=currPtr;
}
чтобы быть
else {
prevPtr->link=selected_player;
selected_player->link=currPtr;
}
Ответ №2:
Если это не домашнее задание, и вы не пытаетесь изучить встроенные алгоритмы в связанном списке, тогда вам следует
- используйте стандартную библиотеку
- избегайте использования указателей, когда они вам не нужны
Тем не менее, чтобы ответить на ваш вопрос:
struct record {
std::string name;
int games_played;
int score;
};
bool lower_score(const recordamp; a, const recordamp; b)
{
return a.score < b.score;
}
// ...
std::vector<record> records = the_records();
std::sort(records.begin(), records.end(), lower_score);
Я не уверен, почему вы хотите использовать список; если у вас нет конкретной причины, то вам, вероятно, следует использовать вектор. В противном случае, std::list
имеет sort()
член:
std::list<record> records = no_no_i_meant_those_records();
records.sort(lower_score);
Комментарии:
1. Спасибо за ваше предложение, но я хочу научиться использовать связанный список.