NetNado
  Найти на сайте:

Учащимся

Учителям



Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач



Основные абстрактные типы данных

  • Схема процесса создания программ для решения прикладных задач


Основные абстрактные типы данных

  • Определение1:

  • Абстрактный тип данных (АТД) -

  • некоторая математическая модель с

  • совокупностью операторов, определенных

  • в рамках этой модели.

  • Например: множество целых чисел с

  • операторами объединения, пересечения и

  • разности множеств.



Основные абстрактные типы данных

  • Определение 2:

  • Абстрактный тип данных (АТД) — это

  • тип данных (набор значений и

  • совокупность операций для этих значений),

  • доступ к которому осуществляется только

  • через интерфейс.



Основные абстрактные типы данных: списки

  • В математике список представляет собой последовательность элементов определенного типа.

  • Список представляется в виде последовательности элементов: a1 ,a2, a3,…,an все аi имеют один тип.

  • Количество элементов п будем называть длиной списка. Если п  1, то a1 называется первым элементом, а an — последним элементом списка.

  • В случае n=0 имеем пустой список, который не содержит элементов.



Основные абстрактные типы данных: списки

  • Постулируем существование позиции, следующей за последним элементом списка.

  • Функция END(L) будет возвращать позицию, следующую за позицией n в n-элементном списке L.

  • Позиция END(L), рассматриваемая как расстояние от начала списка, может изменяться при увеличении или уменьшении списка



Основные абстрактные типы данных: списки

  • INSERT(x, р, L)

  • Этот оператор вставляет объект х в позицию р в списке L, перемещая элементы от позиции р и далее в следующую, более высокую позицию. Если список L состоит из элементов

  • a1 ,a2, a3 ,…,an

  • то после выполнения этого оператора он будет иметь вид a1 ,a2 , a3 ,ap-1,x,ap…,an

  • Если р принимает значение END(L), то будем иметь a1 ,a2, a3,…,an,, х.

  • Если в списке L нет позиции р, то результат выполнения этого оператора не определен.



Основные абстрактные типы данных: списки

  • LOCATE(x, L)

  • Функция возвращает позицию объекта х в списке L.

  • Если в списке объект х встречается несколько раз, то возвращается позиция первого от начала списка объекта х.

  • Если объекта х нет в списке L, то возвращается END(L).



Основные абстрактные типы данных: списки

  • RETRIEVE(p, L)

  • Эта функция возвращает элемент, который стоит в позиции р в списке L.

  • Результат не определен, если р = END(L)

  • или в списке L нет позиции р.

  • Отметим, что элементы должны быть того типа, который в принципе может возвращать функция. Однако на практике мы всегда можем изменить эту функцию так, что она будет возвращать указатель на объект типа elementtype.



Основные абстрактные типы данных: списки

  • DELETE(p, L)

  • Этот оператор удаляет элемент в позиции р списка L.

  • если список L состоит из элементов a1 ,a2, a3,…,an то после выполнения этого оператора он будет иметь вид

  • a1 ,a2 , a3 ,…ap-1, ap+1…,an

  • Результат не определен, если в списке L нет позиции р или р = END(L).



Основные абстрактные типы данных: списки

  • NEXT(p, L) и PREVIOUS(p, L).

  • Функции возвращают соответственно следующую и предыдущую позиции от позиции р в списке L. Если р — последняя позиция в списке L, то NEXT(p, L) = END(L).

  • Функция NEXT не определена, когда р = END(L).

  • Функция PREVIOUS не определена, если р = 1.

  • Обе функции не определены, если в списке L нет позиции р.



Основные абстрактные типы данных: списки

  • MAKENULL(L)

  • Эта функция делает список L пустым и возвращает позицию END(L).



Основные абстрактные типы данных: списки

  • FIRST(L)

  • Эта функция возвращает первую позицию в списке L.

  • Если список пустой, то возвращается позиция END(L).



Основные абстрактные типы данных: списки

  • PRINTLIST(L)

  • Печатает элементы списка L в порядке из расположения.



Реализация списков

  • Представление списка с помощью массива



Реализация списков

  • Const maxl = 1000;

  • Type

  • List = record

  • elements: array[1..maxl] of eltype;

  • last: integer

  • end;

  • position = integer;



Реализация списков

  • Function EndL (var L:List) : position;

  • begin

  • EndL := L.last+1

  • end;



  • procedure INSERTL (x: eltype; р: position; var L: LIST );

  • { вставляет элемент х в позицию р в списке L }

  • var

  • q : position;

  • begin

  • if L.last >= maxlength

  • then Writeln (’Список полон')

  • else if (р > L.last + 1) or (р < 1)

  • then

  • Writeln ('Такой позиции не существует')

  • else begin



  • for q:= L.last downto p do

  • {перемещение элементов на

  • одну позицию к концу списка } L.elements[q+l]:= L.elements[q];

  • L.last:= L.last + 1;

  • L.elements[p]:= x

  • end

  • end; { INSERT }



  • procedure DELETEL ( p: position; var L: LIST ) ;

  • {удаляет элемент в позиции р списка L }

  • var

  • q: position;

  • begin

  • if (p > L.last) or (p < 1)

  • then

  • Writeln ('Такой позиции не существует')

  • else



  • begin

  • L.last:= L.last – 1;

  • for q:= p to L.last do

  • { перемещение элементов из позиций р+1, р+2, ...

  • на одну позицию к началу списка } L.elements[q] := L.elements [q+1]

  • end

  • end; { DELETE }



  • function LOCATE ( x:eltype; L: LIST ): position;

  • { возвращает позицию элемента x в списке L }

  • var

  • q: position;

  • begin

  • for q:= 1 to L.last do

  • if L.elements[q] = x

  • then begin Locate := q; Exit (LOCATE)

  • end

  • else Locate := L.last+1 {х не найден }

  • end; { LOCATE }



Коллекции

  • Класс ArrayList – динамический массив объектов (ссылок).

  • Расширяет класс AbstractList и реализует интерфейс List.

  • Класс имеет конструкторы:

  • ArrayList()

  • ArrayList(Collection c)

  • ArrayList(int capacity)



Коллекции

  • Плюсы:

  • Быстрый доступ по индексу

  • Быстрая вставка и удаление краевых

  • элементов

  • Минусы:

  • Медленная вставка и удаление

  • элементов



Коллекции

  • Методы класса ArrayList

  • void add(int index, Object obj) – вставляет obj в позицию, указанную в index;

  • void addAll(int index, Collection c) – вставляет в вызывающий список все элементы коллекции с, начиная с позиции index;

  • Object get(int index) – возвращает элемент в виде объекта из позиции index;

  • int indexOf(Object ob) – возвращает индекс указанного объекта;

  • Object remove(int index) – удаляет объект из позиции index.



Коллекции

  • /* пример: работа со списком : DemoList1.java */

  • import java.util.*;

  • public class DemoList1 {

  • public static void main(String[] args) {

  • List c = new ArrayList();

  • //Collection c = new ArrayList();

  • int i = 2, j = 5;

  • c.add(new Integer(i));

  • c.add(new Boolean("True"));



Коллекции

  • c.add("");

  • c.add(2, Integer.toString(j) + "X");

  • //добавить во 2 позицию 5

  • System.out.println(c);

  • if (c.contains("5X"))

  • c.remove(c.indexOf("5X"));

  • System.out.println(c);

  • }

  • }



Коллекции

  • на консоль будет выведено:

  • [2, true, 5X, ]

  • [2, true, ]



страница 1


скачать

Другие похожие работы: