Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Відповіді до іспиту по СОД.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
191.49 Кб
Скачать
  1. Стек: призначення, приклади, застосування. Організація та робота стеку на базі масиву. Приклад програмного коду.

Стек, це динамічний список, дані у який вставляються у «хвіст», вибір даних теж виконуються із «хвоста». Мнемонічна назва цієї структури: «останнім прийшов – першим вийшов». Якщо записати у стек якусь послідовність даних, а потім її вибрати із стеку, то отримаємо інвертовану структуру (переписану с кінця). Нижче наведено процедури додавання та вибору елементів із стеку.

const

M:Mas1=((p:3; q:2),(p:1; q:5),(p:1; q:2),(p:2; q:3),(p:2; q:1),

(p:4; q:4),(p:4; q:2),(p:3; q:1),(p:2; q:1),(p:4; q:5),(p:0; q:5));

procedure InsertNodeStack(var First:TNode; Info:Node);

{Вставка одного елемента у стек }

var

NewP:TNode;

begin

New(NewP); // формування елементу стеку і вставка його у стек

NewP^.q:=Info.q; NewP^.p:=Info.p; NewP^.Next:=nil;

if First=nil then

begin //якщо стек порожній

NewP^.Next:=nil; First:=NewP;

end

else

begin //якщо стек не порожній

NewP^.Next:=First First:=NewP;

end;;// procedure InsertNodeStack

  1. Черга: призначення, приклади , застосування. Організація та робота черги на базі масиву. Приклад програмного коду.

Черга в програмуванні — динамічна структура даних, що працює за принципом "перший прийшов - перший пішов" Елемент, що додається до черги, опиняється в її хвості. Елемент, що видаляється з черги, знаходиться в її голові.

Процедура вставки чергового елементу у хвіст черги.

p rocedure InsertNodeLine(var:TNode; Info:Node);

{Додавання елементу у чергу, якщо черга порожня, то First:= nil

First – адреса «хвоста» списку, Info – інформаційна частина елементу списку, тип даних - record}

var

NewP:TNode;

begin

New(NewP); // виділення пам’яті під елемент черги

NewP^.q:=Info.q; // заповнення інформаційної частини елементу

NewP^.p:=Info.p;

NewP^.Next:=nil;

if First=nil then

begin // якщо черга порожня

NewP^.Next:=nil;

First:=NewP;

end

else

begin //якщо в черзі є хоча б один елемент

NewP^.Next:=First;

First:=NewP;

end;

end;// procedure InsertNodeLine

  1. Пошук даних в масиві. Послідовний та бінарний методи пошуку. Переваги та недоліки. Приклад програмного коду.

Бинарный поиск:

Для того, чтобы найти нужную запись в таблице, в худшем случае требуется log2(N) сравнений. Это значительно лучше, чем при последовательном поиске.

BinarySeekMassiv(Left,Right, Number:integer;

var Index,Quant:integer;

M:group):boolean;

begin

BinarySeekMassiv:=false; Quant:=0;

while Left <= Right do

begin

Middle:=(Left+Right) div 2;

if M[Middle].NomKaf < Number then

begin

Left:=Middle+1;

Inc(Quant);

end

else

if M[Middle].NomKaf > Number then

begin

Right:=Middle-1;

Inc(Quant);

end

else

//інакше ми найшли елемент, що шукали

begin

BinarySeekMassiv:=true;

Index:=Middle;

//виходимо із процедури

Exit;

end;

end;

end;

Последовательный

Для последовательного поиска в среднем требуется (N+1)/2 сравнений. Таким образом, порядок алгоритма - линейный - O(N).

//шукаємо елемент із кодом 2 послідовним пошуком

J:=0;

while G[J].NomKaf <>2 do

Inc(J);