- •Процедуры работы со стеком
- •Занесение элемента в стек
- •Выборка и удаление из стека
- •Процедуры работы с очередью
- •Занесение элемента в очередь
- •Выборка и удаление элемента из очереди
- •Примеры реализации операций обработки списков
- •1) Удаление из списка k-го по счету элемента
- •Особые случаи:
- •Процедура удаления
- •Begin
- •2) Включение в список элемента перед k-м по счету
- •Особые случаи:
- •Процедура включения
- •Begin
- •3) Обмен первого и предпоследнего элементов списка
- •procedure change_node(var PSP:u);
Begin
deleted:=false;
if psp=nil then exit;
If k=1 then begin
q:=psp;
psp:=psp^.ukz;
dispose(q);
deleted:=true;
exit;
End;
{список пуст}
{особый случай}
11
{ищем k–й по счету элемент} m:=2;
q:=psp;
p:=q^.ukz;
while (p<>nil) and (m<k) do begin
m:=m+1;
q:=p;
p:=q^.ukz end;
12
If p=nil then exit;
{в списке менее k элементов}
{общий случай}
Q^.ukz:=p^.ukz;
Dispose(p);
Deleted:=true;
End; {procedure}
13
2) Включение в список элемента перед k-м по счету
7 |
|
|
|
|
6 |
|
|
|
|
9 |
|
|
|
|
4 |
|
|
|
|
|
1 |
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
psp
2 K=5
node
14
Особые случаи:
А) k=1 – должен измениться указатель на начало списка;
Б) в списке менее k элементов – включение невозможно.
15
Процедура включения
Procedure ins_k(var psp:u; k:integer; node:u);
{ psp – указатель на начало списка,
K – номер элемента, перед которым вып. включение,
node- указатель на включаемый элемент}
Var m:integer; p, q:u;
16
Begin
if psp=nil then exit; {список пуст}
If k=1 then |
{особый случай} |
begin |
|
node^.ukz:=psp; |
|
psp:=node; |
|
exit; |
|
End; |
|
17
{ищем k–й по счету элемент} m:=2;
q:=psp;
p:=q^.ukz;
while (p<>nil) and (m<k) do begin
m:=m+1;
q:=p;
p:=q^.ukz end;
18
If m<k then exit;
{в списке менее k элементов}
{общий случай}
Q^.ukz:=node;
node^.ukz:=p;
End; {procedure}
19
3) Обмен первого и предпоследнего элементов списка
Особые случаи:
А) в списке менее трех элементов – обмен невозможен;
Б) в списке три элемента – нужно менять первый и второй.
20