160 likes | 542 Views
Кыргыз -Т үрк “Манас” университети Инженердик факультет Компьютердик инженерия бөлүмү. Тема: Тизмелүү структуралар (Сызыктуу тизменин түшүнүгү. Сызыктуу тизменин үстүнөн жүргүзүлгөн амалдар. Стек, кезек, дек түшүнүктөрү жана аларды колдонуу. Приоритеттүү кезектер ). 1 3 04.010 10
E N D
Кыргыз-Түрк “Манас” университетиИнженердик факультетКомпьютердик инженерия бөлүмү Тема: Тизмелүү структуралар (Сызыктуу тизменин түшүнүгү. Сызыктуу тизменин үстүнөн жүргүзүлгөн амалдар. Стек, кезек, дек түшүнүктөрү жана аларды колдонуу. Приоритеттүү кезектер). 1304.01010 Канат Муратов Окутуучу: Айбек Аданбаев БИШКЕК 2014
Сызыктуу тизме: • Бир-бирине байланышкан бир түрдөгү элементтердин тобу сызыктуу тизме деп аталат жана бул топтун ичиндеги ар бир элемент кандайдыр бир жол менен өзүнөн кийинки элементти аныктап берет. Стек жана кезектен айырмаланып, тизмеде жаңы элементти каалаган жерге кошсо болот жана каалаган жерден өчүрүп таштаса болот. • Тизмелүү структуралар башкаларга салыштырмалуу ийкемдүү болушат, бирок ишке ашырылышы татаалыраак. Стек жана кезектер сызыктуу тизменин жеке учуру деп айтсак жаңылышпайбыз, себеби айырмасы: элементтерди кошуп-чийүү амалдары стек жана кезектин аяктарында аткарылат. Тизме менен төмөнкү амалдарды аткарсак болот: • Көрсөтүлгөн элементтен кийин же ага чейин жаңы элементти кошуу жана элементти кошууга текшерүүсүн жүргүзүү; • Көрсөтүлгөн элементти өчүрүү; • Тизменин биринчи элементинен тартып акыркы элементке чейин берилген амалдарды иштетип өтүү; • Берилген элементти тизмеден издөө. • Тизмелерди ишке ашыруунун эки түрү бар: • 1.Статикалык • 2.Динамикалык • Массивдин базасында эки жол менен статикалык түрүн ишке ашырса болот. Тизмелер
1-жолу: • Бир бош уяча бар экендигин же массивде жок дегенде бир элемент бар экендигин тизмедеги элементтердин санын чыгарган эсепчинин жардамы менен аныктайбыз. Берилген элементти издөөнү дагы массивдеги издөө алгоритмдерин колдонуп жасасак болот. • Жаңы элементти кыстаруу үчүн, мисал катары i < N , i номеринен N-ге чейинки элементтерди бирден оңго жылдырабыз (бул жерде массивде бир ашыкча элемент болушу керек). Амалды эң аягынан баштоо керек, б.а. N-ди N+1 ордуна, N-1 – N ордуна ж.б. Бошогон i-чи уячага жаңы элементти жазабыз. • Ушул ирээтти тетирисинен буруп, каалаган элементти өчүрүп койсок болот. Мисал үчүн, i-ни өчүрүү үчүн i-элементти бошотобуз жана кийинки элементтерди бирден солго жылдырабыз, б.а. i+1 – iнин ордуна, i+2 – i+1дин ордуна ж.б.у.с.
Массивдин уячалардын маанилерин которуу амалдары компьютерге оор болуп калышы мүмкүн. Бул учурда көрсөткүчтөрдү колдонсок болот. Ошондо маанилер ордунда эле калып, ал эми которуу болсо көрсөткүчтөрдүн арасында эле жүргүзүлөт.
Стек (англ.stack — стопка)- LIFO принциби боюнча уюштурулган элементтеренинин тизмеси (англ.last in — first out, «акыркы кирди — биринчи чыкты»). Кобунчо стекти бири-бирине коюлган табактар же мылтыктын магазини менен салыштырышат, устунон экинчини жетиш учун эн устункуну алып салыш керек. Стек
1946 жылы Алан Тьюринг стек деген тушунукту киргизди. Бирок 1957 немистер Клаус Самельсон и Фридрих Л. Бауэр патент алышты. • Кээбиртилдерде (мисалы:Lisp, Pythonж.б.) ар кандайтизмени стек депайтаалабыз, анткени POP жана PUSH операцияларыколдонулат. • push Стектинаягынакошуужаныэлементтикошуу • pop Акыркыэлементтичыгаруу • back Акыркыэлементтинмаанисинбилуу (очурбойтуруп) • Size элементтердин саны • Clear Элементтердиочуруу
Program Stack_Test;const • N=30; • var • stack: array[0..N] of char;slen, pos: integer; • procedure push(i:char);begin • if pos < slen thenbegin • stack[pos] := i;pos := pos + 1 • endelse • writeln('Стек полон.'); • end;function pop():char;begin • if pos=0 thenbegin • writeln('Стек пуст.');pop := 0 • endelsebegin • pos := pos - 1;pop := stack[pos] • end; • end; Pos – алдынкыачыкпозициясыныниндекси . ЭгердеPos = 0 – стек бош. Паскальда стекти ишке ашыруу:
FIFO принциби боюнча уюштурулган элементтеренинин тизмеси (англ.firstin — first out, « биринчи кирди — биринчи чыкты») . Элементтерди кошуу (enqueue деген соз менен белгиленет — кезекке коюу) кезектин аягына коюлат, тандоо-кезектин башынан эле болот (enqueue деген соз менен белгиленет — кезектен алуу),ошондо тандалган элемент очурулот. Кезек учун мисал катары дукондуже жононкойтрубаныалсак болот. Кезек
Кезектердинклассификациясы: • Архитектурасыбоюнча (СызыктуужанаАйлана) • Жазууларынпозицияларынын саны боюнча (Жонокойжанаприорететуу) Тажрыйбадакезектербиролчомдуу массив мененишкеашырылат
Programm Queue_Test;var q:array[0..30] of Integer; qnext, (* Индекс занесения *) qindex, (* Индекс извлечения *) qlength:Integer; (* Длина очереди *)procedure qstore(i:Integer); (* Процедура записи в очерель *)begin if (qnext+1)<qlength then begin qnext:=qnext+1; q[qnext]:=i end else writeln('Мест нет')end;function qretrieve():Integer; (* Функция считывания из очереди *)begin if qindex=qnext then begin writeln('Очередь пуста'); qretrieve:=0; end else begin qindex:=qindex+1; qretrieve:=q[qindex] end;end; Паскальда кезекти колдонуу:
Функция qretrieve() кезектен биринчи элементти анан очуруп салат. Эгерде кезектен бут элементтер алынса анда аны бош десек болот.
Приоритеттуу кезек- (англ.priority queue) — 3 операцияны камтыган абстрактык берилиштер туру(АБТ) Приоритеттуу кезек-
Деком (англ. deque – аббревиатура double-endedqueue, Эки-тараптуукезек), LIFOжанаFIFOпринциби боюнча уюштурулган элементтеренинин тизмеси. Дектинкомандалары: • push_front Жаны элемент киргизуу • push_back Жаны элемент аягынакиргизуу • pop_front Биринчиэлементтичыгаруу • pop_back Акыркыэлементтичыгаруу • front Биринчиэлементтинмаанисинбилуу (очурбойтуруп) • back Акыркыэлементтинмаанисинбилуу (очурбойтуруп) • size элементтердинсаны • clear Элементтердиочуруу Дек