2010-12-09 4 views
4

Я создаю список студентов (связанный список), который может добавлять, просматривать и редактировать информацию о студенте. У меня есть два поля: Student Name и Student Grade, и я добавляю новых учеников в список таким образом, чтобы они сортировались в соответствии со ступенями ученика в порядке убывания.Редактирование узла в связанном списке

Я закончил делать добавление и просмотр части. Проблема заключается в части редактирования, потому что мне нужно отредактировать эту информацию, тогда мне нужно снова ее отсортировать, чтобы она находилась в правильном расположении списка.

К примеру, у меня есть 3 студентов информации, расположенных в соответствии с их сортов:

student1 90 -> student2 85 -> student3 80 -> NULL 

Тогда мне нужно изменить класс student2 к 75 так отредактированный связанный список теперь должны быть расположены следующим образом:

student1 90 -> student3 80 -> student2 75 -> NULL 

Как мне это сделать? Вам не нужно давать мне код. Мне просто нужны некоторые советы о том, как я могу реализовать часть редактирования моей программы. Я собираюсь создать новый узел (с отредактированной информацией), удалить старый узел и вставить отредактированный узел в список. Правильно ли моя логика? или есть лучший способ решить мою проблему.

+0

[Устанавливает таймер для подсчета сколько времени до @newbieatc сообщений подобный вопрос] – 2010-12-09 14:26:06

+0

@paul она сегодня не в сети ... :) – newbie 2010-12-09 14:32:52

ответ

2

В принципе, ваша идея правильная, за исключением того, что я бы не создал новый узел. Что бы я сделал:

  1. Определить, было ли значение увеличено или уменьшено (и обновлено).
  2. Удалите узел из списка.
  3. Поиск в обратном направлении или в обратном направлении (в зависимости от увеличения или уменьшения уровня) для правильного расположения.
  4. Узел связи в новое место.

Обратите внимание, что индексирование списка в массив и т. Д. Может дать более быстрый поиск, чем линейный обход. Если у вас уже есть такой механизм, это может быть быстрее использовать при поиске места для повторной установки узла.

+0

Это тоже правильно, но это означает, что он может редактировать узел Linked List Node, но тогда ему придется принудительно провести еще одну полную проверку O (N) в списке. Было бы лучше, если бы он сделал то, что вы сказали на шаге 2, а затем сразу после того, как он редактирует узел («автоматически», не требуя дополнительной функции, которая делает это). Это из того, что я понимаю из вашего описания, иначе проясните. +1 – Muggen 2010-12-09 14:26:04

3

Вы можете достичь своей цели с помощью

  • Удаление целевого узла
  • Редактирование целевого узла данных
  • снова вставьте узел, используя существующую логику для вставки узлов.
+0

спасибо ... :) – newbie 2010-12-09 14:37:48

1

Вы можете выполнить функцию, редактирующую указанный узел. Сканируйте список, пока не найдете этот узел, а затем прямо его отредактируйте. Конечно, вы будете использовать указатель. Для сортировки части, у вас есть п узлов, сравнить каждый узел I с узлами после него и поменять их местами, если один вы сравниваете с больше:

for every node n1 in list 
    for every remaining node n2 in list 
     if n2->grade > n1->grade 
      swap 'em 

вы можете обменять их копировать их память, так что вы не нужно будет менять какой-либо указатель.

+1

yep .. но мне нужно arra это также относится к классам ... – newbie 2010-12-09 14:23:38

3

Непосредственный список?

Найдите узел, который вы хотите отредактировать, и либо сохраните указатель на предыдущий узел, либо напишите процедуру для извлечения предыдущего узла.

Извлеките узел из связанного списка (установив previous_node-> рядом с thisOne-> следующая)

Внесите необходимые изменения. .

Вставьте новый узел в нужном месте в списке (путем обхода списка Унтите следующий узел меньше отредактированного значения

сращивание отредактировано в список (editedNode-> следующий = NextNode; current- > следующая = editedNode)

с дважды связанных списков, вы можете просто использовать «другой»/назад/вверх по ссылке, чтобы найти предыдущий узел

Смежные вопросы