SlideShare a Scribd company logo
1 of 27
Download to read offline
ВВЕДЕНИЕ В
ПРОГРАММИРОВАНИЕ
ЛЕКЦИЯ 8
АБСТРАКТНЫЕ ТИПЫ ДАННЫХ
НЕКОТОРЫЕ ВИДЫ ПОСЛЕДОВАТЕЛЬНОСТЕЙ
СПИСКИ
1Максименкова О.В., 2015
НЕМНОГО ОБ АБСТРАКТНЫХ
ТИПАХ ДАННЫХ
ДЕК, СТЕК, ОЧЕРЕДЬ
Максименкова О.В., 2015 2
АБСТРАКТНЫЕ ТИПЫ ДАННЫХ
Максименкова О.В., 2015 3
• АБСТРАКТНЫЙ ТИП ДАННЫХ (АТД) [ABSTRACT LOGIC DESIGN] –
ФУНКЦИОНАЛЬНОЕ ОПИСАНИЕ НЕКОТОРОГО КЛАССА СУЩНОСТЕЙ В
ТЕРМИНАХ ОПЕРАЦИЙ, КОТОРЫЕ МОГУТ ВЫПОЛНЯТЬСЯ НАД НИМИ.
• ИНТЕРФЕЙС АТД – ФОРМАЛЬНОЕ И ОДНОЗНАЧНОЕ ОПИСАНИЕ
СИНТАКСИСА И СЕМАНТИКИ ОПЕРАЦИЙ, КОТОРЫЕ МОГУТ ВЫПОЛНЯТЬСЯ
НАД ЭКЗЕМПЛЯРАМИ АТД.
ТАК ЖЕ, КАК ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ
НЕ ОПРЕДЕЛЯЕТ ОСОБЕННОСТИ ЕГО РЕАЛИЗАЦИИ, ТАК
И ИНТЕРФЕЙС АТД НЕ ОПРЕДЕЛЯЕТ РЕАЛИЗАЦИЮ АТД.
КОНТЕЙНЕР
Максименкова О.В., 2015 4
• КОНТЕЙНЕР [CONTAINER] – АБСТРАКТНЫЙ ТИП ДАННЫХ,
ПРЕДСТАВЛЯЮЩИЙ СОБОЙ СТРУКТУРИРОВАННУЮ КОЛЛЕКЦИЮ
ИНФОРМАЦИОННЫХ ЭЛЕМЕНТОВ, ДОСТУП К КОТОРЫМ ОПРЕДЕЛЯЕТСЯ
СТРУКТУРОЙ КОНТЕЙНЕРА.
• ДОБАВЛЕНИЕ И УДАЛЕНИЕ ЭЛЕМЕНТОВ КОНТЕЙНЕРА НАЗОВЁМ ЕГО
ТРАНСФОРМАЦИЕЙ.
• ДОСТУП К ЭЛЕМЕНТУ КОНТЕЙНЕРА – ОПЕРАЦИЯ ПОЛУЧЕНИЯ ИЛИ
ИЗМЕНЕНИЯ ЗНАЧЕНИЯ ЭТОГО ЭЛЕМЕНТА.
• ПОСЛЕДОВАТЕЛЬНОСТЬ [SEQUENCE] – КОНТЕЙНЕР, В КОТОРОМ
ЭЛЕМЕНТЫ УПОРЯДОЧЕНЫ ПО ИНДЕКСАМ (ПРОНУМЕРОВАНЫ).
НЕКОТОРЫЕ ВИДЫ
ПОСЛЕДОВАТЕЛЬНОСТЕЙ
• ВЕКТОР [VECTOR]
• ПОСЛЕДОВАТЕЛЬНОСТЬ, В КОТОРОЙ ВОЗМОЖЕН ДОСТУП К
ЛЮБОМУ ЭЛЕМЕНТУ ПО ИНДЕКСУ ЭЛЕМЕНТА
• ДЕК
• СТЕК
• ОЧЕРЕДЬ
Максименкова О.В., 2015 5
ДАЛЕЕ ПОДРОБНЕЕ….
ДЕК
Максименкова О.В., 2015 6
ДЕК [DEQUE, DOUBLE ENDED QUEUE] – ПОСЛЕДОВАТЕЛЬНОСТЬ, В
КОТОРОЙ ВОЗМОЖНЫ ТОЛЬКО:
1. ДОСТУП: К КОНЦЕВЫМ ЭЛЕМЕНТАМ;
2. ДОБАВЛЕНИЕ: ДО НАЧАЛЬНОГО И ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА;
3. УДАЛЕНИЕ: КОНЦЕВЫХ ЭЛЕМЕНТОВ.
Рисунок взят из статьи о Деке с сайта Kvodo [http://kvodo.ru/deque.html]
СТЕК
Максименкова О.В., 2015 7
СТЕК [STACK] – ДЕК, В КОТОРОМ ВОЗМОЖНЫ ТОЛЬКО:
1. ДОСТУП: К КОНЕЧНОМУ ЭЛЕМЕНТУ;
2. ДОБАВЛЕНИЕ: ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА;
3. УДАЛЕНИЕ: КОНЕЧНОГО ЭЛЕМЕНТА.
КОНЕЧНЫЙ ЭЛЕМЕНТ СТЕКА НАЗЫВАЮТ ВЕРШИНОЙ СТЕКА.
удаление
popдобавление
push
ОЧЕРЕДЬ
Максименкова О.В., 2015 8
ОЧЕРЕДЬ [QUEUE] – ДЕК, В КОТОРОМ ВОЗМОЖНЫ ТОЛЬКО:
1. ДОСТУП: К НАЧАЛЬНОМУ ЭЛЕМЕНТУ;
2. ДОБАВЛЕНИЕ: ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА;
3. УДАЛЕНИЕ: НАЧАЛЬНОГО ЭЛЕМЕНТА.
КОНЕЧНЫЙ ЭЛЕМЕНТ ОЧЕРЕДИ ЧАСТО НАЗЫВАЮТ ХВОСТОМ ОЧЕРЕДИ,
А НАЧАЛЬНЫЙ – ГОЛОВОЙ ОЧЕРЕДИ. удаление
pop
добавление
push
ТРАНСФОРМАЦИИ СТЕКА И ОЧЕРЕДИ
Максименкова О.В., 2015 9
ТИПЫ ТРАНСФОРМАЦИЙ СТЕКА И ОЧЕРЕДИ ЧАСТО ОБОЗНАЧАЮТ
АББРЕВИАТУРАМИ:
• LIFO (LAST IN – FIRST OUT, ПОСЛЕДНИМ ПРИШЁЛ – ПЕРВЫМ ВЫШЕЛ)
• FIFO (FIRST IN – FIRST OUT, ПЕРВЫМ ПРИШЁЛ – ПЕРВЫМ ВЫШЕЛ).
http://neerc.ifmo.ru/wiki/index.php?title=Очер
едь
ПРИМЕР РЕАЛИЗАЦИИ СТЕКА
Максименкова О.В., 2015 10
class Stack {
// вершина стека - последний элемент массива
int[] stack; // массив для элементов
public void Push(int x) {
if (stack == null) {
stack = new int[] { x };
return;
}
Array.Resize(ref stack, stack.Length + 1);
stack[stack.Length - 1] = x;
}
public void Pop () {
if (stack == null) return;
if (stack.Length == 1) { stack = null; return; }
Array.Resize(ref stack, stack.Length - 1);
}
}
КОНСТРУКТОР И ВСПОМОГАТЕЛЬНЫЙ
МЕТОД
Максименкова О.В., 2015 11
public Stack() { stack = null; }
public string ToString() {
if (stack == null) return "Стек пуст";
// выводить будем в привычном порядке слева на право
string tmp = "Stack: ";
for (int i = stack.Length - 1; i > 0; i--)
tmp += (stack[i]+" -> ");
tmp += stack[0];
return tmp;
}
Пример реализации стека в рамках структурного подхода [http://neerc.ifmo.ru/wiki/index.php?title=Стек]
КОД ДЛЯ ОТЛАДКИ ОБЪЕКТА КЛАССА
STACK
Максименкова О.В., 2015 12
Stack example = new Stack();
Console.WriteLine(example.ToString());
example.Push(13);
Console.WriteLine(example.ToString());
example.Pop();
Console.WriteLine(example.ToString());
example.Push(1);
example.Push(2);
example.Push(3);
Console.WriteLine(example.ToString());
Стек пуст
Stack: 13
Стек пуст
Stack: 3 -> 2 -> 1
СПИСКИ
ОДНОСВЯЗНЫЙ И ДВУСВЯЗНЫЙ СПИСОК
Максименкова О.В., 2015 13
СПИСОК
• СПИСОК ПРЕДСТАВЛЯЕТ СОБОЙ ТАКУЮ РЕАЛИЗАЦИЮ
ПОСЛЕДОВАТЕЛЬНОСТИ ОДНОТИПНЫХ ЭЛЕМЕНТОВ, КОГДА ЭЛЕМЕНТЫ
СВЯЗАНЫ ДРУГ С ДРУГОМ ПОСРЕДСТВОМ ССЫЛОК.
• КАЖДЫЙ ЭЛЕМЕНТ СПИСКА СОДЕРЖИТ НЕ ТОЛЬКО ИНФОРМАЦИОННОЕ
ПОЛЕ, НО ОДНО ИЛИ БОЛЕЕ ПОЛЕЙ СО ССЫЛКАМИ НА ДРУГИЕ
ЭЛЕМЕНТЫ.
Максименкова О.В., 2015 14
НАИБОЛЕЕ РАСПРОСТРАНЁННЫЕ СПИСКИ
• ОДНОСВЯЗНЫЕ СПИСКИ: КАЖДЫЙ ЭЛЕМЕНТ, КРОМЕ ПОСЛЕДНЕГО,
СОДЕРЖИТ ССЫЛКУ НА СЛЕДУЮЩИЙ, ПОСЛЕДНИЙ ЭЛЕМЕНТ
ССЫЛАЕТСЯ НА NULL
• ДВУХСВЯЗНЫЕ СПИСКИ: КАЖДЫЙ ЭЛЕМЕНТ, КРОМЕ ПЕРВОГО И
ПОСЛЕДНЕГО, СОДЕРЖИТ ССЫЛКИ НА ПРЕДЫДУЩИЙ И СЛЕДУЮЩИЙ
Максименкова О.В., 2015 15
ОДНОСВЯЗНЫЙ СПИСОК
Максименкова О.В., 2015 16
Value Value Value null...
Начало списка [Top]
5 7 10 null...
foo bar baz null...
Примеры
Максименкова О.В., 2015 17
Value Value Value null...
Начало списка [Top]
public class MyListItem {
// значение элемента
public int Value { get; set; }
//ссылка на следующий элемент списка
public MyListItem Next { get; set; }
public MyList() { }
public MyList(int val) {
Value = val;
Next = null;
}
}
Промоделируем элемент односвязного списка
Максименкова О.В., 2015 18
MyListItem head = new MyListItem(1);
head.Next = new MyListItem(2);
head.Next.Next = new MyListItem(3);
head.Next.Next.Next = new MyListItem(4);
MyListItem tmp = head;
while(tmp != null) {
Console.WriteLine(tmp.Value);
tmp = tmp.Next;
}
ВСТАВКА ЭЛЕМЕНТА В ОДНОСВЯЗНЫЙ
СПИСОК
Максименкова О.В., 2015 19
ПУСТЬ ИМЕЕТСЯ НЕКОТОРЫЙ ОДНОСВЯЗНЫЙ СПИСОК И ССЫЛКА Р НА
ЭЛЕМЕНТ, ПОСЛЕ КОТОРОГО МЫ ХОТИМ ВСТАВИТЬ НОВЫЙ ЭЛЕМЕНТ.
Value Value ...
n n+1
...
Предшествующий
элемент
Состояние списка перед
добавление элемента
1. создание нового элемента
2. присвоение значений его полям
3. добавление связи с элементом, следующим за P
4. добавление связи с элементом P
Алгоритм добавления элемента
СОЗДАНИЕ ЭЛЕМЕНТА
Максименкова О.В., 2015 20
?
Новый элемент [Tmp]
?
New
Новый элемент [Tmp]
?
1. Создание нового элемента
2. Присвоение значений его полям
MyListItem Tmp = new MyListItem();
Tmp.Value = 2;
ДОБАВЛЕНИЕ СВЯЗЕЙ
Максименкова О.В., 2015 21
Value Value ...
n n+1
...
New
Новый элемент [Tmp]
Предшествующий
элемент [P]
Value Value ...
n n+1
...
New
Новый элемент [Tmp]
Предшествующий
элемент [P]
3. добавление связи с элементом, следующим за P
4. добавление связи с элементом P
Tmp.Next = p.Next;
p.Next = Tmp;
УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ ОДНОСВЯЗНОГО
СПИСКА
Максименкова О.В., 2015 22
ПУСТЬ ИМЕЕТСЯ НЕКОТОРЫЙ ОДНОСВЯЗНЫЙ СПИСОК И ССЫЛКА Р НА
ЭЛЕМЕНТ, ПРЕДШЕСТВУЮЩИЙ ТОМУ, КОТОРЫЙ МЫ ХОТИМ УДАЛИТЬ.
Состояние списка перед
удалением элемента
1. добавление связи между P и следующим за удаляемым элементом
Алгоритм удаления элемента
Value Value
n n+1
...
Предшествующий
элемент [P]
Value ...
n+2
ИЗМЕНЕНИЕ ССЫЛОК
Максименкова О.В., 2015 23
Value
Value
n
n+1
...
Предшествующий
элемент [P]
Value ...
n+2
Удаляется сборщиком
мусора
Максименкова О.В., 2015 24
public void AddNext(MyListItem newItem) {
// нужно заменить ссылки
newItem.Next = this.Next;
this.Next = newItem;
}
Немного упростим добавление элемента, добавим экземплярный
метод в класс
ДВУСВЯЗНЫЙ СПИСОК
Максименкова О.В., 2015 25
Value Valuenull Value... null
Начало списка [Head] Конец списка [Tail]
5 7null 9... null
Максименкова О.В., 2015 26
Value Valuenull Value... null
Начало списка [Head] Конец списка [Tail]
public class DoulbleLinkyItem {
public int Value { get; set; }
public DoulbleLinkyItem Next { get; set; }
public DoulbleLinkyItem Prev { get; set; }
}
Промоделируем элемент односвязного списка
ЗАКОЛЬЦОВАННЫЕ СПИСКИ
Максименкова О.В., 2015 27
ЗАКОЛЬЦЕВАТЬ СПИСОК МОЖНО ПУТЁМ ИЗМЕНЕНИЯ ССЫЛКИ
ПОСЛЕДНЕГО ЭЛЕМЕНТА ТАКИМ ОБРАЗОМ, ЧТОБЫ ОНА УКАЗЫВАЛА НА
ПЕРВЫЙ ЭЛЕМЕНТ И НАОБОРОТ.

More Related Content

More from Olga Maksimenkova

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияOlga Maksimenkova
 
Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Olga Maksimenkova
 
2020 maksimenkova-dist learning
2020 maksimenkova-dist learning2020 maksimenkova-dist learning
2020 maksimenkova-dist learningOlga Maksimenkova
 
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Olga Maksimenkova
 
Геймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяГеймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяOlga Maksimenkova
 
2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of EducationOlga Maksimenkova
 
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Olga Maksimenkova
 
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Olga Maksimenkova
 
Инженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуИнженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуOlga Maksimenkova
 
Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Olga Maksimenkova
 
Lec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsLec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsOlga Maksimenkova
 
Lec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentLec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentOlga Maksimenkova
 
Lec 01. Mobile games development
Lec 01. Mobile games developmentLec 01. Mobile games development
Lec 01. Mobile games developmentOlga Maksimenkova
 
[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017Olga Maksimenkova
 
Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Olga Maksimenkova
 
Очистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и RОчистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и ROlga Maksimenkova
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#Olga Maksimenkova
 

More from Olga Maksimenkova (20)

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обучения
 
Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"
 
2020 maksimenkova-dist learning
2020 maksimenkova-dist learning2020 maksimenkova-dist learning
2020 maksimenkova-dist learning
 
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
 
Геймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяГеймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себя
 
2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education
 
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
 
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
 
Инженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуИнженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдеву
 
Video Game Design History
Video Game Design HistoryVideo Game Design History
Video Game Design History
 
Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25
 
Lec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsLec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analytics
 
Lec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentLec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, development
 
Lec 01. Mobile games development
Lec 01. Mobile games developmentLec 01. Mobile games development
Lec 01. Mobile games development
 
[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017
 
Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?
 
Очистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и RОчистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и R
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
3. Массивы в C#
3. Массивы в C#3. Массивы в C#
3. Массивы в C#
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 

Абстрактные типы данных. Списки

  • 1. ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ ЛЕКЦИЯ 8 АБСТРАКТНЫЕ ТИПЫ ДАННЫХ НЕКОТОРЫЕ ВИДЫ ПОСЛЕДОВАТЕЛЬНОСТЕЙ СПИСКИ 1Максименкова О.В., 2015
  • 2. НЕМНОГО ОБ АБСТРАКТНЫХ ТИПАХ ДАННЫХ ДЕК, СТЕК, ОЧЕРЕДЬ Максименкова О.В., 2015 2
  • 3. АБСТРАКТНЫЕ ТИПЫ ДАННЫХ Максименкова О.В., 2015 3 • АБСТРАКТНЫЙ ТИП ДАННЫХ (АТД) [ABSTRACT LOGIC DESIGN] – ФУНКЦИОНАЛЬНОЕ ОПИСАНИЕ НЕКОТОРОГО КЛАССА СУЩНОСТЕЙ В ТЕРМИНАХ ОПЕРАЦИЙ, КОТОРЫЕ МОГУТ ВЫПОЛНЯТЬСЯ НАД НИМИ. • ИНТЕРФЕЙС АТД – ФОРМАЛЬНОЕ И ОДНОЗНАЧНОЕ ОПИСАНИЕ СИНТАКСИСА И СЕМАНТИКИ ОПЕРАЦИЙ, КОТОРЫЕ МОГУТ ВЫПОЛНЯТЬСЯ НАД ЭКЗЕМПЛЯРАМИ АТД. ТАК ЖЕ, КАК ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ НЕ ОПРЕДЕЛЯЕТ ОСОБЕННОСТИ ЕГО РЕАЛИЗАЦИИ, ТАК И ИНТЕРФЕЙС АТД НЕ ОПРЕДЕЛЯЕТ РЕАЛИЗАЦИЮ АТД.
  • 4. КОНТЕЙНЕР Максименкова О.В., 2015 4 • КОНТЕЙНЕР [CONTAINER] – АБСТРАКТНЫЙ ТИП ДАННЫХ, ПРЕДСТАВЛЯЮЩИЙ СОБОЙ СТРУКТУРИРОВАННУЮ КОЛЛЕКЦИЮ ИНФОРМАЦИОННЫХ ЭЛЕМЕНТОВ, ДОСТУП К КОТОРЫМ ОПРЕДЕЛЯЕТСЯ СТРУКТУРОЙ КОНТЕЙНЕРА. • ДОБАВЛЕНИЕ И УДАЛЕНИЕ ЭЛЕМЕНТОВ КОНТЕЙНЕРА НАЗОВЁМ ЕГО ТРАНСФОРМАЦИЕЙ. • ДОСТУП К ЭЛЕМЕНТУ КОНТЕЙНЕРА – ОПЕРАЦИЯ ПОЛУЧЕНИЯ ИЛИ ИЗМЕНЕНИЯ ЗНАЧЕНИЯ ЭТОГО ЭЛЕМЕНТА. • ПОСЛЕДОВАТЕЛЬНОСТЬ [SEQUENCE] – КОНТЕЙНЕР, В КОТОРОМ ЭЛЕМЕНТЫ УПОРЯДОЧЕНЫ ПО ИНДЕКСАМ (ПРОНУМЕРОВАНЫ).
  • 5. НЕКОТОРЫЕ ВИДЫ ПОСЛЕДОВАТЕЛЬНОСТЕЙ • ВЕКТОР [VECTOR] • ПОСЛЕДОВАТЕЛЬНОСТЬ, В КОТОРОЙ ВОЗМОЖЕН ДОСТУП К ЛЮБОМУ ЭЛЕМЕНТУ ПО ИНДЕКСУ ЭЛЕМЕНТА • ДЕК • СТЕК • ОЧЕРЕДЬ Максименкова О.В., 2015 5 ДАЛЕЕ ПОДРОБНЕЕ….
  • 6. ДЕК Максименкова О.В., 2015 6 ДЕК [DEQUE, DOUBLE ENDED QUEUE] – ПОСЛЕДОВАТЕЛЬНОСТЬ, В КОТОРОЙ ВОЗМОЖНЫ ТОЛЬКО: 1. ДОСТУП: К КОНЦЕВЫМ ЭЛЕМЕНТАМ; 2. ДОБАВЛЕНИЕ: ДО НАЧАЛЬНОГО И ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА; 3. УДАЛЕНИЕ: КОНЦЕВЫХ ЭЛЕМЕНТОВ. Рисунок взят из статьи о Деке с сайта Kvodo [http://kvodo.ru/deque.html]
  • 7. СТЕК Максименкова О.В., 2015 7 СТЕК [STACK] – ДЕК, В КОТОРОМ ВОЗМОЖНЫ ТОЛЬКО: 1. ДОСТУП: К КОНЕЧНОМУ ЭЛЕМЕНТУ; 2. ДОБАВЛЕНИЕ: ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА; 3. УДАЛЕНИЕ: КОНЕЧНОГО ЭЛЕМЕНТА. КОНЕЧНЫЙ ЭЛЕМЕНТ СТЕКА НАЗЫВАЮТ ВЕРШИНОЙ СТЕКА. удаление popдобавление push
  • 8. ОЧЕРЕДЬ Максименкова О.В., 2015 8 ОЧЕРЕДЬ [QUEUE] – ДЕК, В КОТОРОМ ВОЗМОЖНЫ ТОЛЬКО: 1. ДОСТУП: К НАЧАЛЬНОМУ ЭЛЕМЕНТУ; 2. ДОБАВЛЕНИЕ: ПОСЛЕ КОНЕЧНОГО ЭЛЕМЕНТА; 3. УДАЛЕНИЕ: НАЧАЛЬНОГО ЭЛЕМЕНТА. КОНЕЧНЫЙ ЭЛЕМЕНТ ОЧЕРЕДИ ЧАСТО НАЗЫВАЮТ ХВОСТОМ ОЧЕРЕДИ, А НАЧАЛЬНЫЙ – ГОЛОВОЙ ОЧЕРЕДИ. удаление pop добавление push
  • 9. ТРАНСФОРМАЦИИ СТЕКА И ОЧЕРЕДИ Максименкова О.В., 2015 9 ТИПЫ ТРАНСФОРМАЦИЙ СТЕКА И ОЧЕРЕДИ ЧАСТО ОБОЗНАЧАЮТ АББРЕВИАТУРАМИ: • LIFO (LAST IN – FIRST OUT, ПОСЛЕДНИМ ПРИШЁЛ – ПЕРВЫМ ВЫШЕЛ) • FIFO (FIRST IN – FIRST OUT, ПЕРВЫМ ПРИШЁЛ – ПЕРВЫМ ВЫШЕЛ). http://neerc.ifmo.ru/wiki/index.php?title=Очер едь
  • 10. ПРИМЕР РЕАЛИЗАЦИИ СТЕКА Максименкова О.В., 2015 10 class Stack { // вершина стека - последний элемент массива int[] stack; // массив для элементов public void Push(int x) { if (stack == null) { stack = new int[] { x }; return; } Array.Resize(ref stack, stack.Length + 1); stack[stack.Length - 1] = x; } public void Pop () { if (stack == null) return; if (stack.Length == 1) { stack = null; return; } Array.Resize(ref stack, stack.Length - 1); } }
  • 11. КОНСТРУКТОР И ВСПОМОГАТЕЛЬНЫЙ МЕТОД Максименкова О.В., 2015 11 public Stack() { stack = null; } public string ToString() { if (stack == null) return "Стек пуст"; // выводить будем в привычном порядке слева на право string tmp = "Stack: "; for (int i = stack.Length - 1; i > 0; i--) tmp += (stack[i]+" -> "); tmp += stack[0]; return tmp; } Пример реализации стека в рамках структурного подхода [http://neerc.ifmo.ru/wiki/index.php?title=Стек]
  • 12. КОД ДЛЯ ОТЛАДКИ ОБЪЕКТА КЛАССА STACK Максименкова О.В., 2015 12 Stack example = new Stack(); Console.WriteLine(example.ToString()); example.Push(13); Console.WriteLine(example.ToString()); example.Pop(); Console.WriteLine(example.ToString()); example.Push(1); example.Push(2); example.Push(3); Console.WriteLine(example.ToString()); Стек пуст Stack: 13 Стек пуст Stack: 3 -> 2 -> 1
  • 13. СПИСКИ ОДНОСВЯЗНЫЙ И ДВУСВЯЗНЫЙ СПИСОК Максименкова О.В., 2015 13
  • 14. СПИСОК • СПИСОК ПРЕДСТАВЛЯЕТ СОБОЙ ТАКУЮ РЕАЛИЗАЦИЮ ПОСЛЕДОВАТЕЛЬНОСТИ ОДНОТИПНЫХ ЭЛЕМЕНТОВ, КОГДА ЭЛЕМЕНТЫ СВЯЗАНЫ ДРУГ С ДРУГОМ ПОСРЕДСТВОМ ССЫЛОК. • КАЖДЫЙ ЭЛЕМЕНТ СПИСКА СОДЕРЖИТ НЕ ТОЛЬКО ИНФОРМАЦИОННОЕ ПОЛЕ, НО ОДНО ИЛИ БОЛЕЕ ПОЛЕЙ СО ССЫЛКАМИ НА ДРУГИЕ ЭЛЕМЕНТЫ. Максименкова О.В., 2015 14
  • 15. НАИБОЛЕЕ РАСПРОСТРАНЁННЫЕ СПИСКИ • ОДНОСВЯЗНЫЕ СПИСКИ: КАЖДЫЙ ЭЛЕМЕНТ, КРОМЕ ПОСЛЕДНЕГО, СОДЕРЖИТ ССЫЛКУ НА СЛЕДУЮЩИЙ, ПОСЛЕДНИЙ ЭЛЕМЕНТ ССЫЛАЕТСЯ НА NULL • ДВУХСВЯЗНЫЕ СПИСКИ: КАЖДЫЙ ЭЛЕМЕНТ, КРОМЕ ПЕРВОГО И ПОСЛЕДНЕГО, СОДЕРЖИТ ССЫЛКИ НА ПРЕДЫДУЩИЙ И СЛЕДУЮЩИЙ Максименкова О.В., 2015 15
  • 16. ОДНОСВЯЗНЫЙ СПИСОК Максименкова О.В., 2015 16 Value Value Value null... Начало списка [Top] 5 7 10 null... foo bar baz null... Примеры
  • 17. Максименкова О.В., 2015 17 Value Value Value null... Начало списка [Top] public class MyListItem { // значение элемента public int Value { get; set; } //ссылка на следующий элемент списка public MyListItem Next { get; set; } public MyList() { } public MyList(int val) { Value = val; Next = null; } } Промоделируем элемент односвязного списка
  • 18. Максименкова О.В., 2015 18 MyListItem head = new MyListItem(1); head.Next = new MyListItem(2); head.Next.Next = new MyListItem(3); head.Next.Next.Next = new MyListItem(4); MyListItem tmp = head; while(tmp != null) { Console.WriteLine(tmp.Value); tmp = tmp.Next; }
  • 19. ВСТАВКА ЭЛЕМЕНТА В ОДНОСВЯЗНЫЙ СПИСОК Максименкова О.В., 2015 19 ПУСТЬ ИМЕЕТСЯ НЕКОТОРЫЙ ОДНОСВЯЗНЫЙ СПИСОК И ССЫЛКА Р НА ЭЛЕМЕНТ, ПОСЛЕ КОТОРОГО МЫ ХОТИМ ВСТАВИТЬ НОВЫЙ ЭЛЕМЕНТ. Value Value ... n n+1 ... Предшествующий элемент Состояние списка перед добавление элемента 1. создание нового элемента 2. присвоение значений его полям 3. добавление связи с элементом, следующим за P 4. добавление связи с элементом P Алгоритм добавления элемента
  • 20. СОЗДАНИЕ ЭЛЕМЕНТА Максименкова О.В., 2015 20 ? Новый элемент [Tmp] ? New Новый элемент [Tmp] ? 1. Создание нового элемента 2. Присвоение значений его полям MyListItem Tmp = new MyListItem(); Tmp.Value = 2;
  • 21. ДОБАВЛЕНИЕ СВЯЗЕЙ Максименкова О.В., 2015 21 Value Value ... n n+1 ... New Новый элемент [Tmp] Предшествующий элемент [P] Value Value ... n n+1 ... New Новый элемент [Tmp] Предшествующий элемент [P] 3. добавление связи с элементом, следующим за P 4. добавление связи с элементом P Tmp.Next = p.Next; p.Next = Tmp;
  • 22. УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ ОДНОСВЯЗНОГО СПИСКА Максименкова О.В., 2015 22 ПУСТЬ ИМЕЕТСЯ НЕКОТОРЫЙ ОДНОСВЯЗНЫЙ СПИСОК И ССЫЛКА Р НА ЭЛЕМЕНТ, ПРЕДШЕСТВУЮЩИЙ ТОМУ, КОТОРЫЙ МЫ ХОТИМ УДАЛИТЬ. Состояние списка перед удалением элемента 1. добавление связи между P и следующим за удаляемым элементом Алгоритм удаления элемента Value Value n n+1 ... Предшествующий элемент [P] Value ... n+2
  • 23. ИЗМЕНЕНИЕ ССЫЛОК Максименкова О.В., 2015 23 Value Value n n+1 ... Предшествующий элемент [P] Value ... n+2 Удаляется сборщиком мусора
  • 24. Максименкова О.В., 2015 24 public void AddNext(MyListItem newItem) { // нужно заменить ссылки newItem.Next = this.Next; this.Next = newItem; } Немного упростим добавление элемента, добавим экземплярный метод в класс
  • 25. ДВУСВЯЗНЫЙ СПИСОК Максименкова О.В., 2015 25 Value Valuenull Value... null Начало списка [Head] Конец списка [Tail] 5 7null 9... null
  • 26. Максименкова О.В., 2015 26 Value Valuenull Value... null Начало списка [Head] Конец списка [Tail] public class DoulbleLinkyItem { public int Value { get; set; } public DoulbleLinkyItem Next { get; set; } public DoulbleLinkyItem Prev { get; set; } } Промоделируем элемент односвязного списка
  • 27. ЗАКОЛЬЦОВАННЫЕ СПИСКИ Максименкова О.В., 2015 27 ЗАКОЛЬЦЕВАТЬ СПИСОК МОЖНО ПУТЁМ ИЗМЕНЕНИЯ ССЫЛКИ ПОСЛЕДНЕГО ЭЛЕМЕНТА ТАКИМ ОБРАЗОМ, ЧТОБЫ ОНА УКАЗЫВАЛА НА ПЕРВЫЙ ЭЛЕМЕНТ И НАОБОРОТ.