0% found this document useful (0 votes)
17 views4 pages

Aod 10

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views4 pages

Aod 10

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

program project1;

type
pList = ^TList;
TList = record
info: string;
next: pList;
end;

pDel = ^TDel;
TDel = record
info : string;
pred : pDel;
end;

var pHead : pList;


sp: pDel;
cmd: integer;
x: string;

function Search(key: string): pList;


var pTemp: pList;
begin
pTemp := pHead^.next;
while (pTemp <> pHead) do
if (pTemp^.info = key)
then begin
result := pTemp;
writeln(pTemp^.info,' возвращенное temp');
break;
end
else begin
pTemp := pTemp^.next;
end;
end;
function Search2(key: string): pList;
var pTemp, pPrev: pList;
begin
pTemp := pHead^.next;
pPrev := pHead;
while (pTemp <> pHead) do
if (pTemp^.info = key)
then begin
result := pPrev;
writeln(pTemp^.info,'возвращенное temp');
break;
end
else begin
pPrev:= pTemp;
pTemp := pTemp^.next;
end;
end;

//добавление после элемента


procedure AddAfter;
var pTemp, pNew : pList;
key, data: string;
begin
//prov na pustotu
if (pHead^.next = pHead) then begin
readln(data);
new(pNew);
pNew^.info := data;
pNew^.next := pHead;
pHead^.next := pNew;
end

else begin
write('введите значение поиска = ');
readln(key);
pTemp := Search(key);
if (pTemp = nil) then writeln('false')
else begin
readln(data);
New(pNew);
pNew^.info := data;
pNew^.next := pTemp^.next;
pTemp^.next := pNew;
writeln('true');
end;
end;
end;
//добавление перед элементом
procedure AddBefore;
var pNew, pPrev : pList;
data, key: string;
begin
//prov na pustotu
if (pHead^.next = pHead) then begin
new(pNew);
write('Список пуст введите значение info нового
поля = ');
readln(data);
pNew^.info := data;
pNew^.next := pHead;
pHead^.next := pNew;
end
else begin
write('введите значение поиска = ');
readln(key);
pPrev := Search2(key);

New(pNew);
write('введите значение info нового поля = ');
read(data);
pNew^.info := data;
pNew^.next := pPrev^.next;
pPrev^.next := pNew;
writeln('true');
end;
end;

//удаление

function Pop(key: string): boolean;


var pPrev, pDelete : pList;
pCash : pDel;
begin
//prov na pustotu
if (pHead^.next = pHead) then begin
result := false
end

else begin
pPrev:= Search2(key);
New(pCash);
pDelete := pPrev^.next;

pPrev^.next := pDelete^.next;

pCash^.info := pDelete^.info;
pCash^.pred := sp;
sp:=pCash;
dispose(pDelete);
end;
end;
//вывод
procedure StWriteln;
var pTemp : pList;
begin
pTemp := pHead^.next;
While (pTemp <> pHead) do begin
Write(pTemp^.info,' ');
pTemp := pTemp^.next;
end;
end;

//вывод вспомогательного стека


procedure WrStack;
var pTemp : pDel;
begin
pTemp := sp;
While (pTemp <> nil) do begin
Writeln(pTemp^.info);
pTemp := pTemp^.pred;
end;
end;

begin
//инициализация
new(pHead);
pHead^.next := pHead;
sp:=nil;

repeat
//Меню
Writeln('Выберите действие:');
Writeln('1: Вывод.');
Writeln('2: Вывод удаленного.');
Writeln('3: Поиск.');
Writeln('4: Добавить после или первый элемент.');
Writeln('5: Добавить перед или первый элемент.');
Writeln('6: Мягкое удаление.');
Writeln('7: Выход.');
Write('Введите команду: ');
Readln(Cmd);
case Cmd of
1:StWriteln;
2:WrStack;
3:begin
write('введите key = ');
readln(x);
Search(x); end;
4:begin
AddAfter;end;
5:AddBefore;
6:begin
write('введите key = ');
readln(x);
Pop(x);end;

end;
until Cmd = 7;
end.

You might also like