PElem = ^Elem;
Elem=record кл:Key; инф:Inf, след:Pelem end;
Заголовок | Действие |
Создать (var p:PElem) | p:=NIL |
Таблица пуста? (p:PElem): Boolean | Таблица пуста?:= p=NIL |
Добавить в начало (var p:PElem,x:Key,i:Inf) (доп. перем p1:PElem) | NEW(p1); p1^.кл:=x; p1^.инф:=i; p1^.след:=p; p:=p1; |
Добавить в конец (var p:PElem,x:Key,i:Inf) (доп. перем p1,p2:PElem) (можно обойтись одной доп. перем.) | p1:=p; p2:=p; while p1<>NIL do begin p2:=p1; p1:=p1^.след end; NEW(p1); p1^.кл:=x; p1^.инф:=i; p1^.след:=p; p2^.след:=p1; |
Найти по ключу(p:PElem,x:Key): PElem (доп. перем. p1:PElem) | p1:=p; while (p1<>NIL)and(p1^.кл<>x) do p1:=p1^.след; Найти по ключу:=p1 |
Удалить запись таблицы, заданную ключем, если она есть(var p:PElem,x:Key): (доп. перем. p1,p2:PElem) | p1:=p; p2:=p; while (p1<>NIL)and(p1^.кл<>x) do begin p2:=p1; p1:=p1^.след end; if p1<>NIL then if p1:=p2 then begin p:=p1^.след; DISPOSE(p1) end else begin p2^.след:=p1^.след; DISPOSE(p1) end |
Задача
Реализовать операции для упорядоченной по ключу и упорядоченной по частоте обращения таблиц.
Лекция 3
Структуры ряда
Последовательный набор записей (цепочка). Доступ к записям структуры ряда осуществляется последовательным просмотром записей цепочки. Определена последующая запись для каждой записи цепочки, кроме последней, и определена предыдущая запись для каждой записи, кроме первой. Структуры ряда подразделяются на строки, очереди, стеки и деки.
|
|
Строки
Строка - структура ряда, в которой открыт доступ к любому элементу (любой записи) через последовательный просмотр как от начала цепочки к концу, так и от коца цепочки к началу. Пусть Е - множество элементарных данных, Е(К) - множество всех последовательностей, состоящих из К элементов множества Е, т.е. элементами множества Е(К) являются строки длиной К. В таблице приведены основные операции над строками (использованы обозначения аÎЕ(К1), вÎЕ(К2), сÎЕ(К3), авÎЕ(К1+К2), авсÎЕ(К1+К2+К3) и т.д., dÎЕ(К1-К2+К3))
Имя операции | Функциональные спецификации | Аргументы | Результат | О п и с а н и е |
Конкатенация | Е(К1)´Е(К2)® Е(К1+К2) | а, в | ав | Строка, полученная склейкой строк а и в |
Вычеркивание подстроки | Е(К1+К2+К3)® Е(К1+К3) | авс | ас | Строка, полученная из авс отбрасыванием в |
Разделение | Е(К1+К2)® Е(К1)´Е(К2) | ав | а, в | Разделение на две строки |
Подстановка | Е(К1+К2)´Е(К3)® Е(К1+К3+К2) | ав, с | асв | Подстановка |
Контекстный поиск? | Е(К1)´Е(К2)® Boolean | а, в | истина или ложь | Истина, если в строке а есть подстрока в |
Контекстная замена | Е(К1)´Е(К2)´Е(К3)® Е(К1-К2+К3) | а, в, с | либо d, либо а | Если контекст в найден в а, то он заменяется на контекст с, иначе без изменения |
Представление с помощью массивов
N - максимальная длина строки, s1,s2,...:array[1..N] of Inf.
Задача: реализовать операции над строками, представляя строки с помощью массивов.