Upload
nikolay-grebenshikov
View
4.687
Download
7
Embed Size (px)
Citation preview
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Абстрактные типы данных
Николай Гребенщиков, www.grebenshikov.ru
Основные понятния
• Тип данных
• Структура данных
• Абстрактный тип данных
• Класс
1
Тип данных переменной - множество значений, которыеможет принимать эта переменная.
Java-код:1 int a = 5;2 double b = 0.5;3 string c = ‘‘abc’’;4 boolean d = true;
2
Структура данных - набор переменных, возможно, различ-ных типов данных, объединенных определенным образом.Структура данных создается путем задания имени совокуп-ности (или агрегату) ячеек.
Ячейка является базовым блоком структуры данных, кото-рая предназначена для хранения значения определенного ба-зового или составного типа.
3
Фундаментальные структуры данных
• Массив
• Запись
• Файл
4
Массив - последовательность ячеек определенного типа.
Код на Java:1 int a[] = new int[5];2 boolean d[] = new boolean[5];
d:
1 2 3 4 5true false true true false
d[3] = false
5
Запись - это ячейка, состоящая из нескольких ячеек (по-лей), значение которых могут быть разных типов.
Код на C++:1 struct Student {2 string name;3 string lastName;4 int yearOfEntrance;5 }6 struct Student s;7 s.name=’’Иван’’; s.lastName=’’Петров’’;8 s.yearOfEntrance=2009;
s:
name lastName yearOfEntranceИван Петров 2009
6
Файл(Поток) - это последовательность значений опреде-ленного типа, доступ к которой осуществляется последова-тельным способом.
7
Указатель - ячейка, чьё значение указывает на другую ячей-ку, то есть содержит адрес другой ячейки в памяти.
Курсор - ячейка с целочисленным значением, используемаядля указания на ячейку массива.
8
Код на C++:1 struct S1 { int cursor; struct S1 * pointer; }2 struct S2 { double data; int cursor; }
3 1
1.2 33.4 -15.6 17.8 0
0123
9
Абстрактный тип данных (АТД) - математическая модельс совокупностью операторов, определенных в рамках этоймодели.
Например, АТД “Множество” имеет операторы:
• объединение;
• пересечение;
• разность и другие.
10
Реализация АТД на языке программирования подразу-мевает:
• описание АТД с помощью операторов языка программи-рования;
• определение переменных;
• написание процедуры для каждого из операторов АТД.
11
Структурный подход
• данные описываются структурами данных;
• операторы АТД реализуются с помощью функций и про-цедур.
Код на C++:1 //определение структуры данных2 struct IntSet { int elements[100]; }3 //определение оператора объединения4 void union(struct IntSet * s1, struct IntSet * s2);5 //определение оператора пересечения6 void intersect(struct IntSet * s1, struct IntSet * s2);
12
Объектный подход
Данные и операторы объединяются в объект!
13
Объект: некоторая сущность в виртуальном пространстве,обладающая определённым состоянием и поведением, имеетзаданные атрибуты и операций над ними.
14
Класс определяет скрытую внутреннюю структуру некото-рого значения, а также набор операций, применимых к дан-ному значению.
• данные описываются полями класса;
• операторы АТД реализуются с помощью методов класса.
Экземпляр класса есть объект!
15
Объектный подход
Код на Java:1 class IntSet {2 public int elements[];3 public void union(IntSet s);4 public void intersect(IntSet s);5 }
16
Необходимое нам из ООП
• конструктор;
• интерфейс;
• инкапсуляция;
• шаблон;
17
Конструктор1 class IntSet {2 public int elements[];3 public IntSet(int els[]) {4 elements = els;5 }6 ...7 }8 int a[] = new int[10];9 IntSet set = new IntSet(a);
18
Интерфейс1 interface Set {2 void union(Set s);3 void intersect(Set s);4 }5 class IntSet implements Set {6 public int elements[];7 public IntSet(int els[]) {8 elements = els;9 }10 public void union(Set s) { ... }11 public void intersect(Set s) { ...}12 ...13 }
19
Инкапсуляция1 class IntSet {2 private int elements[];3 private void someFunction() { ... }4 public union(IntSet s) { ... }5 ...6 }
20
Шаблон1 class TemplatedSet<T> {2 private T elements[];3 public IntSet(T els[]) {4 elements = els;5 }6 ...7 }8
9 Integer a[] = new Integer[10];10 TemplatedSet<Integer> set = new TemplatedSet<Integer>(a);
21
Список литературы
• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных иалгоритмы. - М. : Издательский дом “Вильямс”, 2000.сс.23-28.
• Бьерн Страуструп. Язык программирования С++. Специ-альное издание. - СПб. : Бином, Невский диалект, 2008.
• Java SE Documentation.http://java.sun.com/javase/reference/api.jsp
22