Включение элемента в список после заданного

Необходимо включить новый элемент после элемента списка, заданного ссылкой Work2 (рис. 13).

Алгоритм состоит из следующих шагов.

Процедура Включить В Список (X, Work2)

  • 1. BH(Workl).
  • 2. Workl—>Data = X.
  • 3. Work 1 —>Next = Work2—>Next.
  • 4. Work2^Next = Workl.
Включение элемента в список после заданного

Рис. 13. Включение элемента в список после заданного

Включение элемента в конец списка

Зная алгоритм включения элемента после заданного, поставленную задачу можно решить следующим образом. Просмотрев весь список найти последний его элемент и вставить новый элемент за последним.

Однако такой метод допустим только для списков с небольшим количеством элементов. Если же количество элементов в списке велико, то такой алгоритм по очевидным причинам неэффективен. Лучшее решение - ввод второго указателя, указателя на последний элемент списка.

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

Включение элемента в список перед заданным элементом

Пусть требуется включить элемент X, заданный ссылкой Workl, перед элементом списка, заданным ссылкой Work2. Алгоритм решения этой задачи не очевиден, хотя и прост.

Трудность заключается в том, что в односвязном списке нет возможности вернуться к элементу, предшествующему данному. Однако, как вы увидите из алгоритма, это и не требуется. Достаточно включить новый элемент после текущего, а потом поменять местами значения информационных полей (рис. 14).

Процедура Включить_Перед(Х, Work2)

  • 1. ВП(Workl)
  • 2. Workl^Data = Work2^>Data.
  • 3. Workl —ext = Work2—>Next.
  • 4. Work2^Next = Workl.
  • 5. Work2^Data = X.
Включение элемента в список перед заданным

Рис. 14. Включение элемента в список перед заданным

Удаление элемента из списка

Удаление элемента, следующего за заданным

Сначала рассмотрим алгоритм исключения элемента, следующего за элементом, на который указывает World (рис. 15).

Процедура Исключить (Workl)

  • 1. Если Workl^Next-O, выход
  • 2. Work2 = Workl —>Next (получить адрес исключаемого элемента).
  • 3. Workl—>Next = Work2^Next.
  • 4. OIJ(Work2).
Удаление элемента, следующего за заданным

Рис. 15. Удаление элемента, следующего за заданным

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >