Основные понятия алгоритмического языка

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

y^.D) do

begin

pPreComp:=pCKey;

pCKey:=pCKey^.pNext

end;

Здесь указатель pCKey определяет компоненту с заданным ключом, указа-

тель pPreComp содержит адрес предидущей компоненты.

Удаление компоненты с ключом Key выполняется оператором:

 

pPreComp^.pNext:=pCKey^.pNext;

pPreComp pCKey

г=== г===

* *

L===- L===-

г=== г=== г=== г=== г=== г=== г===

*--- D1 KK1 Key KK2 DN ----*

L===- === === === === === L===-

pBegin L-> *--...-> *-- *----> *--...->NIL<-- pEnd

L===- L===- L===- L===- L===-

^

L---------------

Пример. Составить программу, которая формирует список, добавляет в

него произвольное количество компонент, выполняет вставку и удаление

компоненты по ключу, а затем читает и выводит весь список на экран

дисплея. В качестве данных взять строку символов. Ввод данных - с

клавиатуры дисплея, признак конца ввода - строка символов END.

 

Program LISTLINKED;

uses Crt;

type

Alfa= String[10];

PComp= ^Comp;

Comp= record

sD:Alfa;

pNext:PComp

end;

var

pBegin, pEnd, pAux, pCKey, pPreComp: PComp;

sC, sKey: Alfa;

bCond: Boolean;

Procedure CreateLL(var pBegin,pEnd: PComp; var sC: Alfa);

begin

New(pBegin);

pBegin^.pNext:=NIL;

pBegin^.sD:=sC;

pEnd:=pBegin

end;

Procedure AddLL(var pEnd: PComp; var sC: Alfa);

var pAux: PComp;

begin

New(pAux);

pAux^.pNext:=NIL;

pEnd^.pNext:=pAux;

pEnd:=pAux;

pEnd^.sD:=sC

end;

Procedure Find(var sKey: Alfa; var pBegin,pCKey,pPreComp: PComp;

var bCond: Boolean);

begin

pCKey:=pBegin;

while (pCKey pCKey^.D) do

begin

pPreComp:=pCKey;

pCKey:=pCKey^.pNext

end;

if (pCKey = NIL) and (sKey <> pCKey^.sD) then bCond:=FALSE

else bCond:=TRUE

end;

Procedure InsComp(var sKey,sC: Alfa);

var pAux:PComp;

begin

Find(sKey,pBegin,pCKey,pPreComp,bCond);

New(pAux);

pAux^.sD:=sC;

pAux^.pNext:=pCKey^.pNext;

pCKey^.pNext:=pAux

end;

Procedure DelComp(var sKey: Alfa; var pBegin: PComp);

begin

Find(sKey,pBegin,pCKey,pPreComp,bCond);

pPreComp^.pNext:=pCKey^.pNext

end;

begin

ClrScr;

writeln( ВВЕДИ СТРОКУ );

readln(sC);

CreateLL(pBegin,pEnd,sC);

repeat

writeln(ВВЕДИ СТРОКУ );

readln(sC);

AddLL(pEnd,sC)

until sC=END;

writeln( ***** ВЫВОД ИСХОДНОГО СПИСКА *****);

pAux:=pBegin;

repeat

writeln(pAux^.sD);

pAux:=pAux^.pNext;

until pAux=NIL;

writeln;

writeln(ВВЕДИ КЛЮЧ ДЛЯ ВСТАВКИ СТРОКИ);

readln(sKey);

writeln(ВВЕДИ ВСТАВЛЯЕМУЮ СТРОКУ);

readln(sC);

InsComp(sKey,sC);

writeln;

writeln(ВВЕДИ КЛЮЧ УДАЛЯЕМОЙ СТРОКИ);

readln(sKey);

DelComp(sKey,pBegin);

writeln;

writeln( ***** ВЫВОД ИЗМЕНЕННОГО СПИСКА *****);

pAux:=pBegin;

repeat

writeln(pAux^.sD);

pAux:=pAux^.pNext;

until pAux=NIL

end.