SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Хакасский государственный университет им. Н.Ф. Катанова

     Структуры и алгоритмы обработки данных

  Лекция: Линейные структуры данных

       Николай Гребенщиков, www.grebenshikov.ru
Линейное представление - простейшее представление мно-
жества элементов.

{a, b, c, d, e} → (a, b, c, d, e)

Задачи:


  • Информационный поиск


  • Трансляция программных языков


  • Моделирование


  • и т.д.

                                                 1
Последовательность - это упорядоченный список элемен-
тов некоторого множества.

Пусть дано множество X. Тогда конечной последователь-
ностью его элементов называют функцию n → x(n), n ∈
{1, . . . , N }, x(n) ∈ X. Элемент x(n) называют членом после-
довательности с номером n, а натуральное число N ∈ N на-
зывается их общим количеством.




                                                         2
АТД “Список”
1    interface List {
2           void insert(object o, Position position);
3           Position getPosition(object o);
4           object getAt(Position position);
5           void deleteAt(Position position);
6           Position next(Position position);
7           Position previous(Position position);
8           Position end();
9           Position first();
10          void clear();
11   }



                                                        3
Реализация списка с помощью массива




                                      4
Реализация списка с помощью массива
1   class ArrayList {
2          private final int MAX_COUNT = 1000;
3          private Object[] objects = new Object[MAX_COUNT];
4          private int last = 0;
5          int end() {
6                 return last + 1;
7          }
8   }




                                                               5
Реализация списка с помощью массива
1    void insert(object o, int position) {
2           int q;
3           if (last >= MAX_COUNT) { error(‘‘Список полон’’); }
4           else if (position > last || p < 0) {
5                  error(‘‘Позиция не существует’’);
6           }      else {
7                  for (int i = last; i >= p; i--) {
8                          objects[i+1] = object[i];
9                  }
10                 last++;
11                 objects[p] = o;
12          }
13   }


                                                             6
Реализация списка с помощью указателей




                                         7
Реализация списка с помощью указателей
1    class PointerListElement {
2           public object data = null;
3           public PointerListElement next = null;
4    }
5    class PointerList {
6           private PointerListElement head =
7                          new PointerListElement();
8           PointerListElement end() {
9                  PointerListElement result = head;
10                 while(result.next != null) {
11                         result = result.next;
12                 }
13                 return result
14          }
15   }

                                                       8
Реализация списка с помощью указателей
1   void insert(object o, PointerListElement position) {
2          PointerListElement newElement =
3                         new PointerListElement();
4          newElement.data = o;
5          newElement.next = position.next;
6          position.next = newElement;
7   }




                                                           9
Реализация списка с помощью указателей: Вставка




                                            10
Реализация списка с помощью указателей: Удаление




                                            11
Дважды связанный список




1   class PointerListElement {
2          public object data = null;
3          public PointerListElement next = null;
4          public PointerListElement previous = null;
5   }



                                                        12
Стек




       13
Стек - это специальный тип списка, в котором все вставки и
    удаления выполняются только на одном конце, называемом
    вершиной.

    LIFO - last in first out.

    АТД “Стек”
1        interface Stack {
2               void push(object o);
3               object pop();
4               object top();
5               boolean isEmpty();
6               void clear();
7        }

                                                         14
Реализация стека с помощью массива




                                     15
1    class ArrayStack {
2           private final int MAX_COUNT = 1000;
3           private Object[] objects = new Object[MAX_COUNT];
4           private int top = MAX_COUNT;
5           void push(object o) {
6                  if (top <= 0) { error(‘‘Стек полон’’); }
7                  else {
8                         top--;
9                         objects[top] = o;
10                 }
11          }
12          .
13          .
14          .
15   }

                                                                16
Очередь - это специальный тип списка, в котором все встав-
    ки выполняются с одного конца, а удаления с другого.

    FIFO - first in first out.

    АТД “Очередь”
1        interface Queue {
2               void enqueue(object o);
3               object dequeue();
4               object front();
5               boolean isEmpty();
6               void clear();
7        }


                                                         17
Реализация очереди с помощью указателей
1    class PointerQueue {
2           PointerListElement front, rear;
3           void enqueue(object o) {
4                  PointerListElement newElement =
5                                 new PointerListElement();
6                  newElement.data = o;
7                  newElement.next = null;
8                  rear.next = newElement;
9                  rear = newElement;
10          }
11          void isEmpty() {
12                 return front == rear;
13          }
14   }

                                                              18
19
Реализация очереди с помощью циклического массива




                                             20
Реализация очереди с помощью циклического массива
1    class ArrayQueue {
2           private final int MAX_COUNT = 1000;
3           private Object[] objects = new Object[MAX_COUNT];
4           int front = 0, rear = MAX_COUNT - 1;
5           void enqueue(Object o) {
6                  if ((rear + 2) % MAX_COUNT == front) {
7                         error(‘‘Очередь полная’’);
8                  } else {
9                         rear = (rear + 1) % MAX_COUNT;
10                        objects[rear] = o;
11                 }
12          }
13          void isEmpty() {
14                 return (rear + 1) % MAX_COUNT == front;
15          }
16   }
                                                        21
Отображение - это функция определенная на множестве
    элементов (области определения) одного типа, и принимаю-
    щая значения из множества элементов (области значений)
    другого типа.



1   interface Map {
2          void clear();
3          void set(Object index, Object value);
4          void get(Object index);
5   }

1   Map map = new Map();
2   String s1 = ‘‘abc’’, s2 = ‘‘zxc’’;
3   map.set(s1, s2);
4   map.get(s1) => ?

                                                       22
Список литературы


 • Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и
   алгоритмы. - М. : Издательский дом “Вильямс”, 2000.
   сс.45-76.


 • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-
   мы: построение и анализ, 2-е издание. - М. : Издатель-
   ский дом “Вильямс”, 2007. сс.260-268.


 • Кнут Д, Искусство программирования, том 1. Основные
   алгоритмы, 3-е изд. - М. : Издательский дома “Вильямс”,
   2000. сс.277-351.

                                                     23

Contenu connexe

Tendances

ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиOlga Maksimenkova
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Mike Potanin
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Technopark
 
01 линейные структуры данных
01 линейные структуры данных01 линейные структуры данных
01 линейные структуры данныхFedor Tsarev
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьUnguryan Vitaliy
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программированияAlex.Kolonitsky
 

Tendances (20)

ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, списки
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4
 
3. Массивы в C#
3. Массивы в C#3. Массивы в C#
3. Массивы в C#
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы SciPy
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
List - списки
List - списки List - списки
List - списки
 
Основы NumPy
Основы NumPyОсновы NumPy
Основы NumPy
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3
 
01 линейные структуры данных
01 линейные структуры данных01 линейные структуры данных
01 линейные структуры данных
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
Характерные черты функциональных языков программирования
Характерные черты функциональных языков программированияХарактерные черты функциональных языков программирования
Характерные черты функциональных языков программирования
 
Lec 3
Lec 3Lec 3
Lec 3
 

Similaire à Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработки данных"

Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьMikhail Kurnosov
 
Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1simple_people
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Nikolay Grebenshikov
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2Technopark
 

Similaire à Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработки данных" (10)

Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 
Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2
 
Lisp8
Lisp8Lisp8
Lisp8
 
Lisp8
Lisp8Lisp8
Lisp8
 

Plus de Nikolay Grebenshikov

Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простомуNikolay Grebenshikov
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Nikolay Grebenshikov
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Nikolay Grebenshikov
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Nikolay Grebenshikov
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Nikolay Grebenshikov
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Nikolay Grebenshikov
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Nikolay Grebenshikov
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Nikolay Grebenshikov
 
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...Nikolay Grebenshikov
 
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Nikolay Grebenshikov
 
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...Nikolay Grebenshikov
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Nikolay Grebenshikov
 
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 

Plus de Nikolay Grebenshikov (18)

Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
 
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...
Лекция №10. Сортировка. Часть №2. Предмет "Структуры и алгоритмы обработки да...
 
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
Лекция №9. Сортировка. Часть №1. Предмет "Структуры и алгоритмы обработки дан...
 
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"
Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...
Лекция №4. Асимтотическая нотация. Предмет "Структуры и алгоритмы обработки д...
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
 
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
 

Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработки данных"

  • 1. Хакасский государственный университет им. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Линейные структуры данных Николай Гребенщиков, www.grebenshikov.ru
  • 2. Линейное представление - простейшее представление мно- жества элементов. {a, b, c, d, e} → (a, b, c, d, e) Задачи: • Информационный поиск • Трансляция программных языков • Моделирование • и т.д. 1
  • 3. Последовательность - это упорядоченный список элемен- тов некоторого множества. Пусть дано множество X. Тогда конечной последователь- ностью его элементов называют функцию n → x(n), n ∈ {1, . . . , N }, x(n) ∈ X. Элемент x(n) называют членом после- довательности с номером n, а натуральное число N ∈ N на- зывается их общим количеством. 2
  • 4. АТД “Список” 1 interface List { 2 void insert(object o, Position position); 3 Position getPosition(object o); 4 object getAt(Position position); 5 void deleteAt(Position position); 6 Position next(Position position); 7 Position previous(Position position); 8 Position end(); 9 Position first(); 10 void clear(); 11 } 3
  • 5. Реализация списка с помощью массива 4
  • 6. Реализация списка с помощью массива 1 class ArrayList { 2 private final int MAX_COUNT = 1000; 3 private Object[] objects = new Object[MAX_COUNT]; 4 private int last = 0; 5 int end() { 6 return last + 1; 7 } 8 } 5
  • 7. Реализация списка с помощью массива 1 void insert(object o, int position) { 2 int q; 3 if (last >= MAX_COUNT) { error(‘‘Список полон’’); } 4 else if (position > last || p < 0) { 5 error(‘‘Позиция не существует’’); 6 } else { 7 for (int i = last; i >= p; i--) { 8 objects[i+1] = object[i]; 9 } 10 last++; 11 objects[p] = o; 12 } 13 } 6
  • 8. Реализация списка с помощью указателей 7
  • 9. Реализация списка с помощью указателей 1 class PointerListElement { 2 public object data = null; 3 public PointerListElement next = null; 4 } 5 class PointerList { 6 private PointerListElement head = 7 new PointerListElement(); 8 PointerListElement end() { 9 PointerListElement result = head; 10 while(result.next != null) { 11 result = result.next; 12 } 13 return result 14 } 15 } 8
  • 10. Реализация списка с помощью указателей 1 void insert(object o, PointerListElement position) { 2 PointerListElement newElement = 3 new PointerListElement(); 4 newElement.data = o; 5 newElement.next = position.next; 6 position.next = newElement; 7 } 9
  • 11. Реализация списка с помощью указателей: Вставка 10
  • 12. Реализация списка с помощью указателей: Удаление 11
  • 13. Дважды связанный список 1 class PointerListElement { 2 public object data = null; 3 public PointerListElement next = null; 4 public PointerListElement previous = null; 5 } 12
  • 14. Стек 13
  • 15. Стек - это специальный тип списка, в котором все вставки и удаления выполняются только на одном конце, называемом вершиной. LIFO - last in first out. АТД “Стек” 1 interface Stack { 2 void push(object o); 3 object pop(); 4 object top(); 5 boolean isEmpty(); 6 void clear(); 7 } 14
  • 16. Реализация стека с помощью массива 15
  • 17. 1 class ArrayStack { 2 private final int MAX_COUNT = 1000; 3 private Object[] objects = new Object[MAX_COUNT]; 4 private int top = MAX_COUNT; 5 void push(object o) { 6 if (top <= 0) { error(‘‘Стек полон’’); } 7 else { 8 top--; 9 objects[top] = o; 10 } 11 } 12 . 13 . 14 . 15 } 16
  • 18. Очередь - это специальный тип списка, в котором все встав- ки выполняются с одного конца, а удаления с другого. FIFO - first in first out. АТД “Очередь” 1 interface Queue { 2 void enqueue(object o); 3 object dequeue(); 4 object front(); 5 boolean isEmpty(); 6 void clear(); 7 } 17
  • 19. Реализация очереди с помощью указателей 1 class PointerQueue { 2 PointerListElement front, rear; 3 void enqueue(object o) { 4 PointerListElement newElement = 5 new PointerListElement(); 6 newElement.data = o; 7 newElement.next = null; 8 rear.next = newElement; 9 rear = newElement; 10 } 11 void isEmpty() { 12 return front == rear; 13 } 14 } 18
  • 20. 19
  • 21. Реализация очереди с помощью циклического массива 20
  • 22. Реализация очереди с помощью циклического массива 1 class ArrayQueue { 2 private final int MAX_COUNT = 1000; 3 private Object[] objects = new Object[MAX_COUNT]; 4 int front = 0, rear = MAX_COUNT - 1; 5 void enqueue(Object o) { 6 if ((rear + 2) % MAX_COUNT == front) { 7 error(‘‘Очередь полная’’); 8 } else { 9 rear = (rear + 1) % MAX_COUNT; 10 objects[rear] = o; 11 } 12 } 13 void isEmpty() { 14 return (rear + 1) % MAX_COUNT == front; 15 } 16 } 21
  • 23. Отображение - это функция определенная на множестве элементов (области определения) одного типа, и принимаю- щая значения из множества элементов (области значений) другого типа. 1 interface Map { 2 void clear(); 3 void set(Object index, Object value); 4 void get(Object index); 5 } 1 Map map = new Map(); 2 String s1 = ‘‘abc’’, s2 = ‘‘zxc’’; 3 map.set(s1, s2); 4 map.get(s1) => ? 22
  • 24. Список литературы • Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы. - М. : Издательский дом “Вильямс”, 2000. сс.45-76. • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит- мы: построение и анализ, 2-е издание. - М. : Издатель- ский дом “Вильямс”, 2007. сс.260-268. • Кнут Д, Искусство программирования, том 1. Основные алгоритмы, 3-е изд. - М. : Издательский дома “Вильямс”, 2000. сс.277-351. 23