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

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

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

    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
    SlideShare Zeitgeist 2009

    + Nikolay GrebenshikovNikolay Grebenshikov Nominate

    custom

    77 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 77
      • 77 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories