Лекция №5. Линейные структуры данных. Предмет...
Post on 26-Jun-2015
1.640 Views
Preview:
TRANSCRIPT
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Линейные структуры данных
Николай Гребенщиков, www.grebenshikov.ru
Линейное представление - простейшее представление мно-жества элементов.
{a, b, c, d, e} → (a, b, c, d, e)
Задачи:
• Информационный поиск
• Трансляция программных языков
• Моделирование
• и т.д.
1
Последовательность - это упорядоченный список элемен-тов некоторого множества.
Пусть дано множество X. Тогда конечной последователь-ностью его элементов называют функцию n 7→ 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
Реализация списка с помощью массива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
Реализация списка с помощью указателей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 result14 }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
Дважды связанный список
1 class PointerListElement {2 public object data = null;3 public PointerListElement next = null;4 public PointerListElement previous = null;5 }
12
Стек - это специальный тип списка, в котором все вставки иудаления выполняются только на одном конце, называемомвершиной.
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
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
Реализация очереди с помощью циклического массива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
top related