На головну

Алгоритм видалення елемента в списку по ключу

  1.  а) Визначники 2-го, 3-го і п-го порядків (визначення і з св-ва). б) Теорема Лапласа про розкладанні визначника за елементами рядка або стовпчика.
  2.  А.2.2 Спрощена модель поздовжнього елемента жорсткості, утримуваного пластиною
  3.  А.3.2.2 Випробування елемента на стійкість
  4.  АЛГОРИТМ
  5.  алгоритм
  6.  алгоритм
  7.  алгоритм

Видалити зі списку елемент, інформаційна частина (ключ) якого збігається зі значенням, введеним з клавіатури.

Рішення даного завдання проводимо в два етапи - пошук і видалення.

Перший етап - пошук

Алгоритм пошуку аналогічний перегляду списку з початку. Введемо додатковий покажчик і дамо йому значення NULL: Spis2 * key = NULL. Введемо з клавіатури дані значення i_p (Ключ пошуку).

1. Встановимо поточний покажчик на початок списку: t = begin;

2. Початок циклу (виконувати поки t! = NULL).

3. Порівнюємо інформаційну частину поточного елемента з шуканим, якщо вони збігаються (t -> info = i_p), то запам'ятовуємо адреса знайденого елемента: key = t; (Якщо ключ пошуку унікальний, То завершуємо пошук - break).

4. Переставляємо поточний покажчик на наступний елемент: t = t -> next;

5. Кінець циклу.

Виконуємо контроль, якщо key = NULL, т. Е. Шуканий елемент не знайдений, то повідомляємо про невдачу і етап видалення не виконує (return).

Другий етап - видалення

Якщо елемент знайдений (key! = NULL), то виконуємо видалення елемента зі списку в залежності від його місцезнаходження.

1. Якщо видаляється елемент знаходиться на початку списку, т. Е. key дорівнює begin, То першим елементом списку стає другий елемент:

а) покажчик початку списку переставляємо на наступний (другий) елемент:

begin = begin -> next;

б) адресою prev присвоюємо значення NULL, Т. Е. Тепер попереднього немає begin -> prev = NULL;

2. Якщо видаляється елемент в кінці списку, т. Е. key дорівнює end, То останнім елементом у списку повинен стати передостанній:

а) покажчик кінця списку переставляємо на попередній елемент: end = end -> prev;

б) обнуляем адреса next нового останнього елемента

end -> next = NULL;

3. Якщо видаляється елемент знаходиться в середині списку, потрібно забезпечити зв'язок попереднього і наступного елементів (див. Рис. 3.1):

а) від k-го елемента з адресою key звернемося до попереднього (k-1) -го Елементу, адреса якого key-> prev, і в його поле next [(Key-> prev) -> next] запишемо адресу (k+1) -го Елемента, значення якого key-> next:

(Key -> prev) -> next = key -> next;

б) аналогічно в поле prev (k+1) -го Елемента з адресою key-> next запишемо адресу (k-1) -го Елемента:

(Key -> next) -> prev = key -> prev;

4. Звільняємо пам'ять, зайняту віддаленим елементом.

Мал. 3.1

Алгоритм звільнення пам'яті, зайнятої двонаправленим списком, Аналогічний розглянутому алгоритму для стека (див. Лаб. Роботу № 2).



 Додавання елемента |  Реалізація завдання в віконному додатку

 Доп-1.3. індивідуальні завдання |  Короткі теоретичні відомості |  Реалізація завдання в віконному додатку |  Реалізація завдання в командному додатку |  індивідуальні завдання |  Функція формування елемента стека |  Сортування односпрямованих списків |  Реалізація завдання в віконному додатку |  Реалізація завдання в командному додатку |  індивідуальні завдання |

© um.co.ua - учбові матеріали та реферати