FREE := SPISOK[J].LINK; жаңа бос элементтің индексі SPISOK[J].INF
:= С;
ақпаратты енгізу
SPISOK[J].LINK := SPISOK[1].LINK;
көрсеткішті енгізу
SPISOK[1].LINK := J; алдыңғы элементтің көрсеткішін өзгерту
1-ші элементтен кейін тізімнен жою
J := SPISOK[1].LINK; жойылатын элемент индексін таптық
С := SPISOK[J].INF;
ақпаратты көшірдік
SPISOK[1].LINK := SPISOK[J].LINK; көрсеткішті көшірдік
енді FREE-дің алдына қосамыз:
SPISOK[J].LINK := FREE; көрсеткішке бос элементтің индексін
енгіздік
FREE := J; бос элементтің нөмірін ауыстырдық
Операциялар тағы да циклді және керісінше ретте (айналы)
орындалады.
Бірақ та осы операциялардың орындалуына қойылатын қандай да бір
шектеулер бар:
1) элементті қосу кезінде тізімнің толып кетуіне тексеріс жасау;
2) тізімде соңғысынан кейін элементті алып тастауға тексеріс жасау
керек;
3) ең бірінші элементті қалай жоюға болады?
4) бірінші элементтің алдына элементті қалай қосуға болады?
5.3 Сақиналы байланысты тізімы
Бірбайланысты тізімде қалаулы элементіңізге қатынау үшін тізімді
басынан бастап қарап шығу керек. Бұл ыңғайсыз және көп уақыт алады.
Егер элементтерді тізіммен сақинаға тұйықтаса, яғни тізімнің соңғы
элементінің көрсеткішін бірінші элементке ауыстырса, онда тізімді көріп
шығуды кез келген элементтен бастап және барлық тізімді қарап шығуға
болады. Бұндай тізім сақиналы деп аталады.
Сур.13
5.4 Сызықты екібайланысты тізім
Көбінесе сызықты тізімді көріп шығуда элементтер тізбегінің кез
келген бағытында жүру қажет болады: тізімнің соңына да, басына да.
Бұндай мүмкіндікті екібайланысты тізбек қамтамасыз етеді. Бұндай
тізімнің әрбір элементі екі көрсеткішке ие:
1) тік – тізімнің келесі элементіне;
2) кері – тізімнің алдыңғы элементінеы.
Тізім басының көрсеткішінен басқа екібайланысты тізім құрылымына
тізім соңына да көрсеткіш қосу керек (яғн, соңғы элементке). Осылайша,
екібайланысты тізімнің құрылымы келесі түрде болады (мысалда).
Сур.14
Екібайланысты тізімнің сызықтығы екі көрсеткіштің біреуі тізімнің кез
келген элементіне элементтердің реттелуін береді, керісінше, рет басқа
көрсеткішпен орнатылатындығынан шығады.
Екібайланысты тізімнің басы мен соңы логикалық түрде эквивалентті,
себебі тізім элементіне қатынау тізімнің кез келген шегінен жүзеге
асырылады. Әрбір жолдың соңында нөлдік (бос) көрсеткіш тұруы керек.
Әрбір элементте екі көрсеткіштің болуы тізімді күрделендіре түседі
және жадының қосымша шығынына әкеледі, бірақ тізімге қолданылатын
операциялардың ыңғайлы орындалуын қамтамасыз етеді.
Екібайланысты тізімнің әрі қарай жетілдіргендігі сақиналы
екібайланысты тізімге әкеледі. Онда соңғы элементтің тік көрсеткіші бірінші
элементке сілтеледі, ал бірінші көрсеткіштің кері көрсеткіші – соңғы
элементке.
Сақиналы екібайланысты тізімде тізім соңының көрсеткіші керек емес.
Екібайланысты тізімге қосу
Екібайланысты тізімге қосудың ерекшелігі алдыңғы элементтермен
қоса соңғы элементті де модификациялауда.
I индексті элементтен кейін жаңа элементті қою керек болсын.
J := FREE;
бос элемент индексі
SPISOK[J].INF := С;
ақпаратты енгізу
FREE := SPISOK[J].LINK; жаңа бос элементтің индексі
К := SPISOK[I].LINK1;
келесі элементтің индексі
SPfSOK[l].LINK1 := J; алдыңғы элементтің көрсеткішін өзгерту
SPISOK[J].LINK1 := К;
ақпаратты енгізу
SPISOK[J].LINK2 := I; келесі элементтің көрсеткіші
SPISOK[K].LINK2:=J;
Динамикалық құрылымды статикалыққа модельдедік. Бірақ, сонда да
динамикалық құрылымдарды жасаған жақсы. Ал бұл үшін жадының
динамикалық бөлінуін қарастыру керек.
Ұсынылатын әдебиет
1. Костин А.В., Шаньгин В.Ф. Организация и обработка структур
данных в вычислительных системах. – М. Высш. шк., 1987.
2. Вирт Н. Алгоритмы и структуры данных.- М.: Мир, 1988.