p align="justify"> Якщо ж список має хоча б один елемент, то необхідна наступна послідовність дій:
виділяється пам'ять для нового вузла;
в його дані заноситься введена користувачем інформація про студента;
покажчик на наступний вузол для створеного нового вузла прирівнюється вказівником на перший вузол;
покажчик на попередній вузол для створеного нового вузла прирівнюється NULL;
покажчик на попередній вузол для першого елемента прирівнюється вказівником на новий вузол;
покажчик на перший вузол прирівнюється вказівником на новий вузол;
розмір списку інкрементується на одиницю.
Після цього функція припиняє свою роботу.
Малюнок 4.1 - Блок-схема алгоритму додавання елемента в початок двусвязного списку
4.2 Алгоритм видалення інформації про студента з двусвязного списку за індексом
Даний алгоритм реалізується у вигляді функції voidrem (intindex).
void rem (int index) {(size == 0) {( Спісокпуст! n ); ( pause );
} else if (index == 1 amp; amp; index!=size) {* temp=first; gt; next- gt; prev=NULL;=first- gt; next; temp;-;
} else if (index == size amp; amp; index!=1) {* temp=last; gt; prev- gt; next=NULL;=last- gt; prev; temp;-;
} else if (index == size amp; amp; index == 1) {first;=NULL;=NULL; -;
} else if (index gt; 1 amp; amp; index lt; size) {* current=first; (int i=1; i lt; index; i ++) {= current- gt; next ;
} gt; prev- gt; next=current- gt; next; gt; next- gt; prev=current- gt; prev;
delete current; -;
};
}
Спершу перевіряється розмірність списку. Якщо список порожній, то на екран виводиться попередження. Якщо списку не порожній, то слід перевірка, віддаляється Чи перший елемент. Якщо це так, то необхідні наступні дії:
покажчик на тимчасовий вузол инициализируется покажчиком на перший вузол;
знімається пов'язаний з першим елементом покажчик на попередній;
далі призначається першим елементом наступний за ним елемент;
видаляється тимчасовий елемент;
розмір зменшується на одиницю.
Якщо попереднє умова не виконується, то слід перевірка на видалення останнього елемента. Якщо вона виконується, то:
покажчик на тимчасовий елемент инициализируется покажчиком на останній вузол;
знімається пов'язаний з останнім елементом покажчик наследующий;
далі призначається останнім елементом йде перед ним елемент;
видаляється тимчасовий елемент;
розмір зменшується на одиницю.
Якщо попереднє умова не виконується, то відбувається перевірка на видалення єдиного елемента зі списку. Якщо це так, то:
видаляється перший елемент;
покажчик на перший елемент прирівнюється NULL;
покажчик на посл?? дний елемент прирівнюється NULL;
розмір зменшується на одиницю.
Якщо і ця умова не виконується, то відбувається перевірка, віддаляється Чи елемент з середини списку. Якщо умова виконується, то необхідні наступні дії:
вказівник на поточний вузол инициализируется першого;
в циклі від i=1 до i lt; index з кроком інкрементація, рівним одиниці, переміщаємося за списком через покажчик на наступний вузол від поточного;
обнуляем пов'язані з елементів покажчики;
видаляємо поточний вузол;
зменшуємо розмір на одиницю.
Якщо умова не виконується, то функція припиняє свою роботу.
Малюнок 4.2 - Алгоритм видалення запису з двусвязного списку за індексом
4.3 Алгоритм фільтрації даних про студентів на ім'я
Даний алгоритм реалізується за допомогою функції voidfilter_name ().
void filter_name () {(size == 0) {( cls ); ( Спісокпуст! n );
} else {* current=first; i=1; s; .enter_name (); ( cls ); ( # | Група | ФаміліяІмяОтчество | О.1 | О.2 | О.3 | Соц |nraquo;);(laquo;----|--------|-------------------------------------|-----|-----|-----|-----|nraquo;);(current !=NULL) {stud=current- gt; data; (strcmp (...