Лекция №11
Элементтер жиынын байланыстырудың ең жеңіл тәсілі -әрбір элементтің өзінен кейін орналасқан элементке сілтеме жасауын жүзеге асыру. Мұндай тізім бірбағытты(бірбайланысты) деп аталады. Егер әрбір элемент үшін өзінен бұрын орналасқан элементке бағытталған тағы бір сілтеме қосатын болсақ,онда қосбағытты (қосбайланысты) тізім пайда болады, егер соңғы элементті нұсқауыш арқылы алғашқы элементпен байланыстырса, сақиналық тізім құрылады. Тізімнің әрбір элементінде осы элементті анықтайтын кілт болады. Кілт, әдетте, бүтін сан немесе тіркес болады және ол мәліметтер өрісінің бір бөлігі болып табылады.Тізіммен жұмыс істеу барысында кілт ретінде мәліметтер өрісінің түрлі бөліктерін қолдануға болады. Мысалы, тегі,туылған жылы, жұмыс өтілі және жынысы толтырылатын сызықтық тізім құрылатын болса, жазбаның кез келген бөлігін кілт ретінде алуға болады: алфавит бойынша сұрыптау кезінде кілт тегі болады, ал іздеу кезінде, мысал ретінде еңбек ардагерлерін алсақ, кілт жұмыс өтілі болады. Тізімнің әртүрлі элементтерінің кілттері сәйкес келуі мүмкін
Тізімдерге келесі операцияларды қолдануға болады:
• тізімді бастапқы қалыптастыру (алғашқы элементін құру);
• тізімнің соңына элемент қосу;
• кілті көрсетілген элементті оқу;
• элементті тізімнің көрсетілген позициясына кірістіру
(кілті берілген элементтің соңына немесе алдына);
• кілті көрсетілген элементті жою;
• тізімді кілт бойынша реттеу.
Қосбағытты сызықтық тізімді қарастырайық. Тізімді қалыптастыру және онымен жұмыс жасау үшін кем дегенде бір нұсқауыш болуы керек - ол тізім басына сілтеме жасайды. Тізім соңына бағытталған қосымша бір нұсқауыш енгізген ыңғайлы болады. Жеңілдік үшін тізім бүтін сандардан тұрады деп есептейік, онда тізім элементінің сипаттамасы төмендегідей болады:
struct Node{
int d;
Node *next;
Node *prev;
};
Программалаудағы маңызды концепциялардың бірі – стек концепциясы. Стек деректердің қайсыбір абстрактілі типі ретінде есептеледі. Функцияларды да абстрактілі тип ретінде қарауға болады.
Стек - бұл құрамына элемент қосу және оны таңдау стектің төбесі деп аталатын бір басынан ғананорындалатын бірбағытты тізімнің дербес түрі. Стекке қолданылатын басқаоперациялар анықталмаған. Таңдау кезінде элемент стектен алынып тасталады. Стек LIFO (last in - first out, соңғы болып енеді - бірінші болып шығады) қызмет көрсету принципін жүзеге асырады. Стекті бір ұшы жабық, ішіне доп лақтырылатын тар ұзынша құбыр ретінде елестетуге болады.
Ең бірінші салынған допты алу үшін, одан кейін салынған барлық доптарды шығарып алу керек. Жергілікті(локалды) айнымалыларға жады принципі бойынша бөлінетін болғандықтан, стек сегменті дәл осылайаталған.Стектер жүйелі программалық жабдықтамаларда,компиляторларда, әртүрлі рекурсивті алгоритмдерде кеңінен қолданылады.Төмендегі программа 5 саннан тұратын (1, 2, 3, 4, 5) стек құрады және оны экранға шығарады. Дәстүр бойынша стекке орналастыру функциясын push, ал таңдау функциясын рор деп атайды. Стекпен жұмыс жасауғаарналған нұсқауыш (top) әрқашан оның төбесіне сілтеме жасайды.
#include "stdafx.h"
#include
using namespace System;
using namespace std;
struct Node{
int d;
Node *p;
};
Node * first(int d);
void push(Node **top, int d);
int pop(Node **top);
//-------------------------------------
int main()
Node *top = first(1);
for (int i = 2; i<6; i++) push(&top, i);
while (top)
cout << pop(&top)<<’ ‘;
cout << "\n\n";
system("pause");
return 0;
}
//-----------------------------------------
Достарыңызбен бөлісу: |