Разделы презентаций


Типовые алгоритмы работы со списками 1 ТИПОВЫЕ АЛГОРИТМЫ РАБОТЫ СО

Содержание

Типовые алгоритмы работы со спискамиА1. Инициализация списка. (Создание нового и пустого линейного односвязного списка) Procedure InitList; begin Head := NIL; Tail := NIL; end;А2. Добавить элемент в конец односвязного спискаVar pnew

Слайды и текст этой презентации

Слайд 1Типовые алгоритмы работы со списками
ТИПОВЫЕ АЛГОРИТМЫ РАБОТЫ СО СПИСКАМИ
Объявления

переменных, используемых в примерах

var
Head : Plist; { Указатель

на голову списка }
Tail : Plist; { Указатель на «хвост» списка }
P : Plist; { Указатель на текущий элемент списка }

TData – тип данных, размещаемых в информационной части элемента списка
{в примерах заменяется в соответствии с конкретной ситуацией}
Типовые алгоритмы работы со спискамиТИПОВЫЕ АЛГОРИТМЫ РАБОТЫ СО СПИСКАМИ Объявления переменных, используемых в примерахvar  Head :

Слайд 2Типовые алгоритмы работы со списками
А1. Инициализация списка.
(Создание нового и

пустого линейного односвязного списка)
Procedure InitList;
begin
Head := NIL;

Tail := NIL;
end;

А2. Добавить элемент в конец односвязного списка

Var
pnew :PList; {указатель на новый элемент}
begin
new(pnew); {запросить память}
pnew^.data:=indata; {присвоить полю Data значение}
if Head <> nil then {список непустой ?}
Tail^.Next := pnew
else
Head := pnew;
{end if}
pnew^.Next:=nil;
Tail := pnew;
end;

Типовые алгоритмы работы со спискамиА1. Инициализация списка. 	(Создание нового и пустого линейного односвязного списка)	Procedure InitList;	begin	  Head

Слайд 3Типовые алгоритмы работы со списками
А3. Исключить элемент из начала списка

(вернув поле данных)
Procedure OutList(var OutDat:TData);
Var
P:Plist;
begin

OutData := Head^.Data;
p:=Head;
Head:=Head^.Next; {присвоить указателю на голову списка ссылку
на новый первый (бывший второй) элемент}
Dispose(p); {освободить память, занятую элементом}
end;

А4. Удалить элемент из середины списка (с освобождением памяти)

P := Prev^.next;
Prev^.Next := P^.Next;
Dispose(P); {освободить память}

Типовые алгоритмы работы со спискамиА3. Исключить элемент из начала списка (вернув поле данных) Procedure OutList(var OutDat:TData);Var

Слайд 4Типовые алгоритмы работы со списками
А5. Включить элемент (pnew) в середину

списка
{Для случая односвязного списка}
pnew^.next:=prev^.next;
prev^.next:=pnew;
А6. Обработать каждый

элемент линейного списка

P := Head;
while P <> NIL do begin
Выполнить операцию обработки элемента P^
P := P^.Next; {перейти к следующему элементу}
end;

Типовые алгоритмы работы со спискамиА5. Включить элемент (pnew) в середину списка{Для случая односвязного списка}  pnew^.next:=prev^.next;

Слайд 5Типовые алгоритмы работы со списками
Пример.
Пусть информационное поле элемента –

целое число.
Задача обработки:
Подсчитать количество элементов, значение информационных
полей которых

превышает значение Value

Count := 0;
P := Head;
while P <> NIL do begin
if P^.Data > Value then
Count := Count +1;
{end if}
P := P^.Next;
end;

Типовые алгоритмы работы со спискамиПример. 	Пусть информационное поле элемента – целое число. Задача обработки: 	Подсчитать количество элементов,

Слайд 6Типовые алгоритмы работы со списками
А7. Найти первый элемент, удовлетворяющий некоторому

условию
Var
flagFound : boolean;
begin
P :=

Head;
flagfound := false;
while (P<>NIL) and (not flagfound) do
if (выполнено условие) then
flagfound := true {элемент найден}
else
P := P^.Next;
{end while}
end;
Типовые алгоритмы работы со спискамиА7. Найти первый элемент, удовлетворяющий некоторому условиюVar   flagFound : boolean; begin

Слайд 7Типовые алгоритмы работы со списками
А8. Уничтожить список с освобождением памяти
P

:= Head; {Установить указатель на удаляемый элемент}
while PNIL do begin

Head := P^.Next; {установить ссылку на следующий}
Dispose(P); {освободить память,
занятую удаляемым элементом}
P := Head; {установить новый удаляемый элемент }
end;
Типовые алгоритмы работы со спискамиА8. Уничтожить список с освобождением памятиP := Head; {Установить указатель на удаляемый элемент}while

Слайд 8Типовые алгоритмы работы со списками
А9. Добавить элемент в упорядоченный односвязный

список
(сохранив упорядоченность)
Procedure InSortList(indata : integer);
var
p, pnext, pnew

: plist;
begin
new(pnew);
pnew^.data := indata;
if (Head=NIL) or (Head^.data > indata) then begin
{добавить элемент в начало списка}
pnew^.next := Head;
Head := pnew;
end
else begin
p := Head;
pnext := p^.next;
while (pnext <> NIL) and (pnext^.data < indata) do begin
p := p^.next;
pnext := pnext^.next;
end; {включить элемент}
pnew^.next := pnext;
p^.next := pnew;
end;
end;
Типовые алгоритмы работы со спискамиА9. Добавить элемент в упорядоченный односвязный список (сохранив упорядоченность)Procedure InSortList(indata : integer);var

Слайд 9Типовые алгоритмы работы со списками
A10. Найти элемент, удовлетворяющий условию, и

вернуть указатель на него
function search(indata:integer):plist;
var
p : plist;
begin

p := head;
while (p <> nil) and (p^.data <> indata) do
p := p^.next;
{end}
search := p;
end;
Типовые алгоритмы работы со спискамиA10. Найти элемент, удовлетворяющий условию, и вернуть указатель на негоfunction search(indata:integer):plist;var

Слайд 10Типовые алгоритмы работы со списками
Обработать все элементы линейного замкнутого (кольцевого)

списка
procedure work(head:plist);
var
p : plist;
begin
p

:= head;
while (p^.next <> head) do
begin
Обработать элемент p^
p := p^.next;
end;
end;

procedure work(head:plist);
var
p : plist;
begin
p := head;
while (p <> nil) and (p^.next <> head) do
begin
Обработать элемент p^
p := p^.next;
end;
end;

Типовые алгоритмы работы со спискамиОбработать все элементы линейного замкнутого (кольцевого) спискаprocedure work(head:plist);var   p : plist;begin

Слайд 11Типовые алгоритмы работы со списками
Задача:
Дана строка символов.
Найти и вывести

все подстроки, заключенные в круглые скобки.
Порядок вывода: после строки со

словом «Результат:» вывести в отдельных строках все найденные подстроки.
Если одна подстрока является частью другой, то сначала вывести более короткую.

Задачу решить с использованием списочной структуры типа «стек»:

Примечание. Алгоритм работы со стеком предполагает использование операций:
hush() – занести в вершину стека новую запись
pop() – извлечь запись из вершины стека, освободив занятую ей память

Метод решения

Рассматривая строку как массив, обеспечить последовательный анализ каждого символа, начиная с первого в строке.
В стек загружать позиции открывающих скобок.
Вывод подстроки производить когда встретится парная для нее закрывающая скобка.

Типовые алгоритмы работы со спискамиЗадача:Дана строка символов. Найти и вывести все подстроки, заключенные в круглые скобки.Порядок вывода:

Слайд 12Типовые алгоритмы работы со списками
{Модуль "функции работы со стеком“}
uses mystack;
Interface

Type
PStack = ^TStack;
TStack = record

pos : integer;
next : PStack;
end;
procedure push(var Head:Pstack; nom:integer);
function pop(var Head:Pstack):integer;

Implementation
procedure push(var Head:Pstack; nom:integer);
var
pnew : Pstack;
begin
New(pnew);
pnew^.pos := nom;
pnew^.next := Head;
Head := pnew;
end;

function pop(var Head:Pstack):integer;
var
p : Pstack;
begin
if Head = nil then
pop := 0
else begin
p := Head;
pop := p^.pos;
head := Head^.next;
Dispose(p);
end;
end;
begin
end;

Файл «mystack.pas»

Типовые алгоритмы работы со списками{Модуль

Слайд 13Типовые алгоритмы работы со списками
Программа в файле «demo.pas»
program demo;
{разделение строки

на подстроки}
uses
mystack;
var
st : string;
j,

j1 : integer;
Head : pstack;
begin
st := '';
head := nil; {инициализация стека}
for j:= 1 to Length(st) do
if st[j]='(' then
push(head, j)
else if st[j]=')' then begin
j1 := pop(head);
if (j1<>0) and (j-j1>1) then
writeln(copy(st, j1, (j-j1+1));
{endif}
{endif}
end;
{освободить память, если стек не пустой}
while head<>nil do
j1 := Pop(head);
{end}
end.

Исходная строка: (((4+6)*7)+(6*(8+7))
Результат:
4+6
(4+6)*7
8+7
6*(8+7)

Проверить программу на примере:

Типовые алгоритмы работы со спискамиПрограмма в файле «demo.pas»program demo;{разделение строки на подстроки}uses  mystack;var  st :

Слайд 14Типовые алгоритмы работы со списками
Дома:
Ввести с клавиатуры произвольное количество чисел

и поместить их в список.
Вывести на экран каждый второй элемент

этого списка.
Решить задачу из Тестера – Матрицы - 3
Типовые алгоритмы работы со спискамиДома:Ввести с клавиатуры произвольное количество чисел и поместить их в список.Вывести на экран

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика