Professional Documents
Culture Documents
– белешки од предавања –
5. Еднодимензионални податочни
структури
- стек, редица, приоритетна редица-
1
испочитува постигнатиот договор. Јасното одвојување на одговорностите е особено
важно кога станува збор за големи проекти и комплексни апликации.
По додавање
По додавање
на уште една
На почеток: По вадење на на книга:
книга
книга:
2001
Misérables Misérables
Rob Roy
War & Peace War & Peace War & Peace War & Peace
Moby Dick Moby Dick Moby Dick Moby Dick
2
врв празно
depth=0 1 maxdepth–1
Празен стек
0 1 2 depth=3 4 5
Пример Moby War & Rob
(maxdepth = 6): Dick Peace Roy
врв
Празен стек
Постојат голем број практични примери на стек. Тесен магацин, со ширина еднаква
на товарот кој во него се складира, и кој има еден влез, преставува стек. Во него,
последно внесениот товар треба да се извади прв.
Стекот има особено голема примена во самите компјутерски системи, бидејќи со
негова помош е возможно реализирање на концептот на подпроцедури, нивно
повикување и враќање.
Следат неколку примери за корисноста од овој податочен тип.
3
датотека и се запишуваат редиците како што се вадат од стекот. Самата природа на
стекот ќе значи дека редоследот во излезната датотека ќе биде обратен од оној во
влезната. Следниот алгоритам ја илустрира оваа постапка.
4
Постојат различни начини на претставување на аритметичките изрази, во однос на
тоа каде се наоѓа операторот во однос на операнците. Нам луѓето најблизок за
разбирање ни е начинот наречен инфикс, кога операторот се наоѓа помеѓу
операндите.
Следниот израз е даден во инфикс нотација.
(5+9) * 2+6 * 5
Постои и таканаречена префиксна или полска нотација, каде прво се запишуваат
операторите, а потоа операндите. Истиот израз, даден во постфикс нотација може да
се запише како
+*+592*65
При тоа се забележува дека нема потреба од постоење на загради.
Обратната нотација, каде операторите се запишуваат после операндите се нарекува
обратна полска нотација или постфикс нотација. И кај неа нема потреба од загради.
Изразот од примерот, напишан во постфикс нотација изгледа вака
59+2*65*+
Токму вака запишаните изрази лесно можат да се пресметаат (евалуираат),
користејќи стек. Алгоритмот што следи ја опишува оваа постапка
0 front=rear maxlen–1
Празна
редица
6
Слика 5.6 Пример за последователни додавања и вадења на елементи во редица
6 1
5 2
0 1 2 3 4 5 6 7
4 3
0 front=rear maxlen–1
Празна
редица:
7
На почеток: По додавање на Homer, Marge, Bart, Lisa:
0 1 2 3 4 5 0 1 2 3 4 5
elems elems Homer Marge Bart Lisa
Празна front
редица: rear
Редицата исто така има голем број на примени. Секоја редица на чекање на добивање
одреден сервис всушност се претставува со апстрактниот тип редица. Во
компјутерските системи, редиците се користат кај мрежните печатачи, каде повеќе
8
корисници испраќаат документи за печатење на делен печатач, потоа кај хард
дисковите, односно во нивните драјвери, каде повеќе процеси бараат пристап до
податоците од дискот. Уште една примена е во оперативните системи, каде повеќе
процеси чекаат на ред да бидат опслужени од процесорот. Системот наречен
распределувач (scheduler) ги распределува процесите кои чекаат во листата и им
обезбедува пристап до процесорот.
Еден ислустративен пример за примена на редицата е поделба на подредена датотека
со податоци, во две или повеќе повторно подредени датотеки, според даден
критериум.
На пример, дадена е датотека со податоци за студентите, подредена според нивниот
број на индекс. За одредена обработка, потребно е да се подели оваа датотека на две,
една со машки, една со женски студенти, но сепак да се задржи подредувањето
според бројот на индекс. Кодот во продолжение го прави токму тоа, користејќи 2
редици.
9
5.4 Приоритетна редица - priority queue
Приоритетната редица преставува еднодимензионална линеарна секвенца од
елементи, каде секој елемент има свој приоритет. Карактеристично за неа е што
елементот со најголем приоритет секогаш прв се вади од листата. Должина на
приоритетна редица е бројот на елементи што ги содржи, при што празната
приоритетна редица има должина 0.
Приоритетната редица има примена секаде каде што е потребно да се имплементира
ред на чекање, но каде постојат разлики во приоритетот на оние кои чекаат во тој
ред. Карактеристичен пример е претходно споменатиот распределувач на процеси во
оперативните системи. Не сите процеси во еден оперативен систем имаат исто
значење. Постојат процеси на таканареченото јадро на оперативниот систем за кои е
посебно важно веднаш да добијат пристап до процесорот, за разлика од
корисничките процеси, кои не се суштински за функционирањето на системот. Токму
овој принцип се имплементира со приоритетна редица.
Уште еден пример на примена на приоритетната редица е подредувањето.
10
При имплементација со низа: пребарувањето ќе биде со сложеност О(n) ако се
пребарува линеарно. Ако се земе во предвид подреденоста, може да се пребарува и
поинтелигентно, на пример бинарно, при што сложеноста е O(log n). Но на ова мора
да се додаде сложеноста на вметнување на елемент во низа, која е O(n).
При имплементација со листа: пребарувањето мора да биде од почеток и линеарно,
значи O(n). Самото вметнување е O(1).
11