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

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

on

  • 1,884 views

 

Statistics

Views

Total Views
1,884
Views on SlideShare
1,883
Embed Views
1

Actions

Likes
1
Downloads
13
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Хакасский государственный университет им. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Линейные структуры данных Николай Гребенщиков, 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