СПИСКИ. СТЕК. ОЧЕРЕДЬ Варианты списков 1.Однонаправленные списки 1.1. Списки без заглавного звена... a n nil L a1a1 a2a2 Удаление 1 звена L a1a1 a 2...

Презентация:



Advertisements
Похожие презентации
Быстрая сортировка Хоара (Hoare C.A.R.) (алгоритм quicksort) Индекс А Значение ключа Индекс А Значение ключа.
Advertisements

Множества. Внутреннее представление.. Механизм внутреннего представления Каждое значение базового типа представляется одним битом. В память заносится.
Множественный тип данных Множество в языке Паскаль – это ограниченный набор различных элементов одного (базового) типа, которые рассматриваются как единое.
Реализация списков:динамические структуры ListList clasclas структура одного элемента type LIST = celltype; celltype = record element: eltype; next: LIST.
Использование частных случаев в условиях. Флаг в задачах Задача. Определить место первого четного элемента в массиве.
Регулярные типы ::= Описание регулярных типов type M = array [ТИ] of ТЭ; Здесь: array (массив) и of (из) - служебные слова Паскаля; ТИ – тип индексов;
PROGRAM example1; const m=100; var a : ARRAY [1.. m] of INTEGER; i,k,n,q : INTEGER; BEGIN readln (n); randomize; WRITELN('Полученный массив:' ); FOR i.
Рекурсивная обработка списков1 Структуры и алгоритмы обработки данных, 1 Лекция 3 Рекурсивная обработка списков 1.Представление и реализация.
Команда 1 Команда 2 Команда N... Как называются алгоритмы такой структуры? Линейные.
1 Программирование на языке Паскаль Тема 1. Массивы.
Алгоритм Евклида. Наибольший общий делитель Требуется составить программу определения наибольшего общего делителя ( НОД ) двух натуральных чисел. НОД.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Оператор ветвления. Для реализации ветвления в программе используют условный оператор (оператор ветвления). Условный оператор в полной форме записывается.
При решении многих задач приходится обрабатывать большое количество однотипных данных. Для хранения этих данных пришлось бы вводить большое количество.
1 Программирование на языке Паскаль Тема 2. Ветвления © К.Ю. Поляков,
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Тема урока Переменная. Тип данных. Ввод и вывод данных.
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Массивы Вариант 1 Program upr1; Var s,a:real; I: integer; Begin S:=0; For I:=1 to 10 do Begin Writeln (введите очередное число'); Readln(a); S: =s+a; End;
1 Программирование на языке Паскаль Ветвления. 2 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения:
Транксрипт:

СПИСКИ. СТЕК. ОЧЕРЕДЬ Варианты списков 1. Однонаправленные списки 1.1. Списки без заглавного звена... a n nil L a1a1 a2a2 Удаление 1 звена L a1a1 a 2... Удаление произвольного не 1-го звена L a1a1 a2a2 a3a3...

1.2 Список с заглавным звеном a n nil L a1a1 a3a3... заглавное звено 1.3 Циклические списки anan L a1a1 a2a Двунаправленные списки L... nil a 1 a 2 a n-1 a n nil

Стек (stack) Стеком (другое название – магазин) называется последовательность однотипных элементов, по отношению к которой применяются следующие две операции: 1) новые элементы всегда добавляются в конец последовательности, 2) элементы всегда удаляются из конца последовательности. стек : Векторное представление стека … N Mabcd k4 const N =...; {размер массива M} type ТЭС =...; {тип элементов стека} стек = record M: array[1..N] of TЭС; k: 0..N end;

1) Начальная установка стека: procedure Нач УстСтека(var S: стек); {сделать стек пустым} begin S.k:=0 end; 2) Проверка на пустой стек: function Пустой Стек(var S: стек): boolean; {стек пуст?} begin Пустой Стек:=S.k=0 end; 3) Запись элемента в стек: procedure ВСтек(x: TЭС; var S: стек); {x --> стек} begin with S do begin if k=N then ошибка(1); {переполнение стека} k:=k+1; M[k]:=x end end; 4) Считывание элемента из стека: procedure Из Стека(var S: стек; var x: TЭС); {стек --> x} begin if Пустой Стек(S) then ошибка(2); {пустой стек} with S do begin x:=M[k]; k:=k-1 end end;

function Соотв Скобок(ОС, ЗС: char): boolean; begin Соотв Скобок:=(ОС='(') and (ЗС=')') or (ОС='[') and (ЗС=']') or (ОС='{') and (ЗС='}') end; function скобки: boolean; var S: стек; {любое представление, ТЭС=char} c, d: char; begin Нач УстСтека(S); Скобки:=false; read(c); while (c<>.) and not Ош do begin if (c='(') or (c='[') or (c='{') then ВСтек(c,S) else if (c=')') or (c=']') or (c='}') then begin if Пустой Стек(S) then break; Из Стека(S,d); if not Соотв Скобок(d,c) then break end; end; {of while} if Пустой Стек(S) then скобки:= true; end;

Очередь Очередь - это последовательность однотипных элементов, по отношению к которой применяются следующие две операции: 1) новый элемент добавляется в конец очереди, 2) первым всегда удаляется элемент из начала очереди. очередь: Списковое представление очереди c nil нач ab кон type ТЭО =...; {тип элементов очереди (любой)} адрес = звено; звено = record элем: ТЭО; след: адрес end; очередь = record нач, кон: адрес end;

1) Начальная установка очереди procedure Нач УстОчереди(var Q: очередь); {сделать очередь пустой} begin Q.нач:=nil; Q.кон:=nil end; 2) Проверка на пустую очередь function Пустая Очередь(var Q: очередь): boolean; {очередь пуста?} begin Пустая Очередь:= Q.нач=nil end; 3) Запись элемента в очередь procedure ВОчередь(x: T; var Q: очередь); {x --> очередь} var p: адрес; begin new(p); p.элем:=x; p.след:=nil; with Q do begin if нач=nil then нач:=p else кон.след:=p; кон:=p end end;

4) Считывание элемента из очереди procedure Из Очереди(var Q: очередь; var x: ТЭО); {очередь --> x} var p: адрес; begin if Пустая Очередь(Q) then ошибка(3); with Q do begin p:=нач; x:=p.элем; нач:=p.след; if нач=nil then кон:=nil; dispose(p) end end;

3.3 Пример на использование очереди Пусть для ввода дана последовательность ненулевых целых чисел, за которой следует ноль (это признак конца последовательности). Требуется вывести на экран эти же ненулевые числа в следующем порядке: сначала - все положительные числа, а затем – все отрицательные числа, причем должен сохраняться исходный взаимный порядок следования в каждой из этих двух групп. Например: 2 8 –4 5 –2 4 0 ==> –4 -2 Идея решения: вводим числа по одному; если очередное число положительно, то сразу выводим его, а если это число отрицательно, то ставим его в очередь: очередь –4 5 – вывод

procedure Вывод Чисел; var Отр: очередь; {любое представление, ТЭО=integer} r: integer; begin Нач УстОчереди(Отр); read(k); while k<>0 do begin if k>0 then write(k, ' ') else Вочередь(k,Отр); read(k); end; while not Пустая Очередь(Отр) do {вывод < 0} begin Из Очереди(Отр,k); write(k, ' ') end; writeln end;