Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Полезная методичка

.pdf
Скачиваний:
82
Добавлен:
01.04.2014
Размер:
1.09 Mб
Скачать

но ых эл м нто или исключ ния эл м нто . О н ко н пр ктик ч сто н о хо имо ыполнять проц уры ключ ния и исключ ния от льных эл м нто , что при о ит к н о хо имости р р отки структур нных, по р и ющих эти оп р ции.

4.1.1Лин йны списки и о ы оп р ции н ними

Список кон чн я посл о т льность эл м нто , поря ок которых опр ля тся с помощью ссылок.

Êо ым оп р циям ля списк относятся:

1.поиск н которо о нно о эл м нт с ключом x (тру о м- кость O(n) );

2.поиск м ксим льно о (миним льно о) эл м нт (тру о м- кость O(n) );

3.ключ ни эл м нт (тру о мкость O(1) );

4.исключ ни эл м нт (тру о мкость O(1) );

5.формиро ни списк (тру о мкость O(n) );

6.просмотр списк (тру о мкость O(n) ).

Сущ ст уют р личны спосо ы р ли ции списк . Н и ол р спростр н нными я ляются сл ующи .

Ð ëè öèÿ è óõ ì ññè î A è B .

Пусть i ин кс эл м нт списк , то A[i] ñ ì ýë - ì íò, B[i] ин кс сл ующ о эл м нт списк A . Åñëè k ин кс посл н о эл м нт списк , то B[k] = 0 . Êðîì òî î, ñóù ñò óþò ï ð ì ííû : nz ин кс н ч л нятых компон нт и ns ин кс н ч л с о о ных компон нт.

Òî ì ññè

2; 12; 17

у т р ли о н сл ующим о р ом.

51

2

17

12

*

*

*

A

 

 

 

 

 

 

 

1

2

3

4

5

6

 

 

 

 

 

 

 

 

3

0

2

5

6

0

B

 

 

 

 

 

 

 

nz = 1

ns = 4

Сл ующ я р ли ция списк состоит исполь о нии посл о т льно с я нных компон нт.

Д нн я р ли ция мо т ыть осущ ст л н сл ующим о - р ом: к я компон нт списк состоит и ух яч к п - мяти (п р я со р ит с м эл м нт ли о ук т ль н о м - стополо ни , тор я ук т ль н сл ующий эл м нт) (лин йный список, о нон пр л нный список).

Òî ì ññè

2; 12; 17

у т р ли о н сл ующим о р ом.

2

- 12

- 17 nil

Óïð í íè .

Н пис ть проц уры, р ли ующи о ы оп р ции н списком, который мо лиру тся с помощью ух м сси о .

При м р ли цию н которых о ых оп р ций ля р оты с лин йным списком.

uk =" el; el=record key : data;

next : uk; end;

52

Включ ни эл м нт список

Включ ни эл м нт мо т ыть осущ ст л но н сколькими спосо ми. В с я и с т м, что списк с и стно о н ч ло, тр иционно но ый эл м нт ключ ют н ч ло списк .

Сн ч л при м прим р проц уры ключ ния эл м нт с ключом x посл эл м нт , н который ук ы т ссылк p .

p

1

- 6

 

4 q

Ïðî ð ììí ÿ ð ëè öèÿ ííîé ïðîö óðû ìî ò ûòü ñë óþ- ù é.

new(q);

q " :key := x;

q " :next := p " :next; p " :next := q;

Т к я р ли ция оп р ции ключ ния р нтиру т (при нном p ) тру о мкость O(1) .

Т п рь пр поло им, что ну но ключить эл м нт с ключом x п р эл м нтом н который ук ы т ссылк p .

Ïðî ð ììí ÿ ð ëè öèÿ ííîé ïðîö óðû ìî ò ûòü ñë ó- þù é.

new(q);

q " :key := p " :key; q " :next := p " :next; p " :key := x;

p " :next := q;

53

 

 

 

 

 

p

 

 

 

-

 

 

 

 

-

 

 

1

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

q

p

1- 4

* 6

q

Ç ì òèì, ÷òî ñëè è ñòíî p , то мо но ыполнить ключ ни и п р эл м нтом р мя O(1) .

Формиро ни списк

Н чин я с пусто о списк , посл о т льно ключ м эл м нты н ч ло списк .

head:=nil; while true do

{

new(p);

p " :next := head; p " :key := x; head := p;

}

 ýòîì ñëó÷ í í î î ð òû òü îò ëüíî ñèòó öèþ, êî

ключ тся эл м нт пустой список, о н ко поря ок сл о ния

54

эл м нто списк о р т н поря ку их ключ ния. В случ ях, ко-

поря ок сл о ния ол н со п ть с поря ком их ключ - ния, н о хо имо сти ук т ль н посл ний поступи ший эл - м нт ( tail ) и ключ ть эл м нты н оло у списк ( head ), посл посл н о поступи ш о эл м нт . В этом случ п р ый и клю- ч мых эл м нто о р ты тся ин ч , ч м ост льны эл м нты.

Ни при о ится про р ммн я р ли ция опис нной проц у- ры формиро ния списк .

head:=nil;

tail:=nil; while true do

{

new(p);

p " :next := nil; p " :key := x;

if head = nil then head := p else tail " :next := p; tail := p;

}

Исключ ни эл м нт и списк

Сн ч л р ссмотрим исключ ни эл м нт и списк посл эл м н- т , н который ук ы т ссылк p .

J

 

 

- J

-

 

J

 

 

J

 

pJJ

Про р ммн я р ли ция исключ ния эл м нт и списк мо тыть сл ующ й.

q := p " :next;

p " :next := q " :next; dispose(q);

Т п рь исключим эл м нт и списк , н который ук ы т ссылк p . Для это о исключ м сл ующий p эл м нт, п - р этим с о поля копируются яч йку п мяти, н которую ук ы т ссылк p .

55

 

 

 

 

T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

T

 

-

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

nil

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

 

 

 

` ` `

 

 

 

 

 

 

 

T

 

 

 

 

 

 

p

q

T

 

 

 

s

Для то о, что ы н о р ты ть от льно ситу цию, ко у ля-мый эл м нт я ля тся посл ним, исполь у тся р спростр н нный при м: пост но к рь р ( о мо но пр ст ить, к к пустой эл - м нт конц списк ). Пр поло им, что п р м нн я s я ля тся ук т л м н яч йкурь р. То про р ммн я р ли ция про- ц уры у л ния мо т ыть сл ующ й.

q := p " :next;

ifelsep " :next = s then s := p

{

p " :key := q " :key;

}p " :next := q " :next;

dispose(q);

Отм тим, что о оих случ ях тру о мкость проц уры у л ния р н O(1) .

Поиск эл м нт

Поиск эл м нт x н упоря оч нном списк осущ ст ля тся посл о т льным просмотром эл м нто . Он к нчи тся ли о при о н ру нии тр у мо о эл м нт , ли о при ости нии конц списк . Для то о, что ы оптими иро ть усло и оконч ния просмотр , у м исполь о ть т хнику рь р ( s ). П р м нн я headу т ук ы ть н н ч ло списк .

Ни при о ится про р ммн я р ли ция проц уры поиск эл м нт x .

s " :key := x; w := head;

while (w " :key 6= x) do w := w " :next;

if w 6= s then { w ссылк н эл м нт с ключом x } else { ýë ì íò í í é í }

56

Для то о, что ы проц ур отр от л пр ильно случ , ко-

список пустой, н о хо имо при формиро нии списк ыполнить оп р тор: head := s:

Тру о мкость опис нной ыш проц уры поиск сть O(n) . Усо рш нст о ть м то поиск мо но, сли осущ ст лять по-

иск упоря оч нном списк . В упоря оч нном списк эл м нт x мо но к нчи ть при о н ру нии п р о о ключ со н ч ни мольшим, ч м x . Упоря оч нность списк ости тся пут м клю- ч ния но о о эл м нт по хо ящ ля н о м сто, что по оля т полностью исполь о ть и кость списко ой структуры. О н ко,

упоря оч нны лин йны списки н по оляют ор ни о ть нич о по о но о н оичный поиск м сси х.

К оп р циям р оты со списк ми т к мо но отн сти:

Конк т н цию (сц пл ни ) ух списко , р ульт т которой о р у тся иный список. ту оп р цию мо но ыполнить р мя O(1) , сли им ются р с п р о о и посл - н о эл м нто списко , что по олит ыполнить оп р цию сц пл ния полно о просмотр о но о и списко ля опр -л ния р с о посл н о эл м нт . Если и стны толь-

ко н ч льны р с , то тру о мкость нной оп р ции сть O(n+m) , n; m - колич ст о эл м нто сц пля мых спис- к х.

Р сц пл ни списк . ту оп р цию мо но ыполнить р - мя O(1) , сли и ст н ук т ль н эл м нт н поср ст нно пр ш ст ующий м сту р сц пл ния.

4.1.2Ñò êè è î û îï ð öèè í íèìè

Ино при р от со списко ой структурой о ник т потр ностьключ ть и исключ ть эл м нты опр л нном поря к . Если р -ли у тся принцип "посл ний ош л п р ый ыш л", то т кую списко ую структуру н ы ют ст ком или м ином.

Н помним, что л оритмы р ш ния т ких и стных ч, к к про рк л нс ско ок рифм тич ском ыр нии, ычисл - ни н ч ния ыр ния, исполь уют ст к. В льн йш м н ми у-н р ссмотр н щ ря ч, которых у т исполь о ться эт структур нных.

57

Если р н и стно м ксим льно колич ст о эл м нто ( l ), о но р м нно хр нящихся ст к , то ц л соо р но мо лиро ть ст к н м сси постоянной лины. Пусть п р м нн я top ñî ð-èò èí êñ ïîñë í î êëþ÷ ííî î ñò ê ýë ì íò (ï ð îí ÷ ëüíî top = 0 ), то проц уры ключ ния и исключ ния эл м нт и ст к р ли уются сл ующим о р ом:

Включ ни эл м нт ст к, р ли о нный и о ном рно о м сси

if top > l then { í ò ì ñò } else

{

inc(top);; A[top] := x;

}

Исключ ни эл м нт и ст к , р ли о нно о и о ном рно о м сси

if top < 1 then { ñò ê ïóñò } else

{

x := A[top]; dec(top);

}

В случ , ко колич ст о эл м нто р н н и стно, ст к мо т ыть р ли о н и списко ой структуры:

uk =" el; el=record val : data; next : uk; end;

Òî ï ð ì íí ÿ top ó ò ñî ð òü ð ñ ïîñë í î êëþ- ÷ ííî î ñò ê ýë ì íò (ï ð îí ÷ ëüíî top = nil ), проц урыключ ния и исключ ния эл м нт у ут им ть сл ующий и .

58

Включ ни эл м нт ст к, р ли о нный и списко ой структуры

new(dop);

dop " :val := x; dop " :next := top; top := dop;

Исключ ни эл м нт и ст к , р ли о нно о и списко ой структуры

if top = nil then { ñò ê ïóñò } else

{

x := top " :val; dop := top;

top := top " :next; dispose(dop);

}

Тру о мкость проц ур ключ ния и исключ ния эл м нт и ст ксть O(1) .

4.1.3Î÷ ð è è î û îï ð öèè í íèìè

Оч р ь я ля тся щ о ним сп ци льным и ом списк , ко эл - м нты с ключ ются кон ц списк , исключ ются и н ч л списк , т. . р ли у тся принцип "п р ый ош л п р ый ыш л".

С н о хо имостью р оты с оч р ью мы у ст лки лись при р ссмотр нии л оритм л ксико р фич ской (цифро ой сортиро - ки).

Если м ксим льно колич ст о эл м нто , о но р м нно хр нящихся оч р и н пр осхо ит l , то мо но смо лиро ть цикли- ч скую оч р ь н м сси постоянной лины l . Ñ î÷ ð üþ ñ ÿ-ì ï ð ì ííû head è tail , опр ляющи ин ксы п р о о и посл н о эл м нто оч р и (п р он ч льно head = 1 è tail = = 0 ) è ï ð ì ííóþ óë ñêî î òèï empty , котор я р н true ñëó÷ , êî î÷ ð ü ïóñò .

59

Включ ни эл м нт циклич скую оч р ь, р ли о нную и о ном рно о м сси

inc(tail);

if tail = l + 1 then tail := 1; A[tail] := x;

if empty then empty := false;

Исключ ни эл м нт и циклич ской оч р и, р ли о нной и о ном рно о м сси

if empty then { î÷ ð ü ïóñò } else

{

x := A[head];

if head = tail then empty := true; inc(head);

if head = l + 1 then head := 1;

}

Если колич ст о эл м нто оч р и р н н и стно, то ля р ли ции оч р и исполь у тся списко я структур . В этом слу- ч п р м нн я head ñî ð èò ð ñ ï ð î î ýë ì íò î÷ ð è, tail ïîñë í î ýë ì íò î÷ ð è (ï ð îí ÷ ëüíî head; tail =

=nil ).

Включ ни эл м нт оч р ь, р ли о нную и списко ой структуры

new(dop);

dop " :val := x; dop " :next := nil;

if head <> nil then tail " :next := dop else head := dop;

tail := dop;

60

Соседние файлы в предмете Структуры и алгоритмы обработки данных