1 / 30

Vector ADT and Array-based Implementation

The Vector Abstract Data Type (ADT) extends the notion of an array to store a sequence of arbitrary objects. It allows for accessing, inserting, and removing elements by specifying their rank. This implementation is useful in various applications and can be implemented using arrays.

jputnam
Download Presentation

Vector ADT and Array-based Implementation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vectors week 2b

  2. Outline and Reading • The Vector ADT (§5.1) • Array-based implementation week 2b

  3. The Vector ADT extends the notion of array by storing a sequence of arbitrary objects An element can be accessed, inserted or removed by specifying its rank (number of elements preceding it) An exception is thrown if an incorrect rank is specified (e.g., a negative rank) Main vector operations: object elemAtRank(integer r): returns the element at rank r without removing it object replaceAtRank(integer r, object o): replace the element at rank with o and return the old element insertAtRank(integer r, object o): insert a new element o to have rank r object removeAtRank(integer r): removes and returns the element at rank r Additional operations size() and isEmpty() The Vector ADT week 2b

  4. Applications of Vectors • Direct applications • Sorted collection of objects (elementary database) • Indirect applications • Auxiliary data structure for algorithms • Component of other data structures week 2b

  5. Use an array V of size N A variable n keeps track of the size of the vector (number of elements stored) Operation elemAtRank(r) is implemented in O(1) time by returning V[r] Array-based Vector V 0 1 2 n r week 2b

  6. Insertion • In operation insertAtRank(r, o), we need to make room for the new element by shifting forward the n - r elements V[r], …, V[n -1] • In the worst case (r =0), this takes O(n) time V 0 1 2 n r V 0 1 2 n r V o 0 1 2 n r week 2b

  7. V 0 1 2 n r V 0 1 2 n r V o 0 1 2 n r Deletion • In operation removeAtRank(r), we need to fill the hole left by the removed element by shifting backward the n - r -1 elements V[r +1], …, V[n -1] • In the worst case (r =0), this takes O(n) time week 2b

  8. Performance • In the array based implementation of a Vector • The space used by the data structure is O(n) • size, isEmpty, elemAtRankand replaceAtRankrun in O(1) time • insertAtRankand removeAtRankrun in O(n) time • If we use the array in a circular fashion, insertAtRank(0)and removeAtRank(0)run in O(1) time • In an insertAtRankoperation, when the array is full, instead of throwing an exception, we can replace the array with a larger one week 2b

  9. Lists and Sequences week 2b

  10. Outline and Reading • Singly linked list (§5.2) • Position ADT and List ADT (§5.2.2) • Doubly linked list (§5.2.4) • Sequence ADT (§5.3) • Implementations of the sequence ADT • Iterators (§5.5) week 2b

  11. Singly Linked List • A singly linked list is a concrete data structure consisting of a sequence of nodes • Each node stores • element • link to the next node next node elem  A B C D week 2b

  12. Stack with a Singly Linked List • We can implement a stack with a singly linked list • The top element is stored at the first node of the list • The space used is O(n) and each operation of the Stack ADT takes O(1) time nodes t  elements week 2b

  13. Queue with a Singly Linked List • We can implement a queue with a singly linked list • The front element is stored at the first node • The rear element is stored at the last node • The space used is O(n) and each operation of the Queue ADT takes O(1) time r nodes f  elements week 2b

  14. The Position ADT models the notion of place within a data structure where a single object is stored It gives a unified view of diverse ways of storing data, such as a cell of an array a node of a linked list Just one method: object element(): returns the element stored at the position Position ADT week 2b

  15. The List ADT models a sequence of positions storing arbitrary objects It establishes a before/after relation between positions Generic methods: size(), isEmpty() Query methods: isFirst(p), isLast(p) Accessor methods: first(), last() before(p), after(p) Update methods: replaceElement(p, o), swapElements(p, q) insertBefore(p, o), insertAfter(p, o), insertFirst(o), insertLast(o) remove(p) List ADT week 2b

  16. Doubly Linked List prev next • A doubly linked list provides a natural implementation of the List ADT • Nodes implement Position and store: • element • link to the previous node • link to the next node • Special trailer and header nodes elem node trailer nodes/positions header elements week 2b

  17. Insertion p • We visualize operation insertAfter(p, X), which returns position q A B C p q A B C X p q A B X C week 2b

  18. p A B C D Deletion • We visualize remove(p), where p = last() A B C p D A B C week 2b

  19. Performance • In the implementation of the List ADT by means of a doubly linked list • The space used by a list with n elements is O(n) • The space used by each position of the list is O(1) • All the operations of the List ADT run in O(1) time • Operation element() of the Position ADT runs in O(1) time week 2b

  20. // size and determination size(); isEmpty(); capacity(); setSize(); //truncate/expand // element access contains(e); firstElement(); lastElement(); elementAt(); // insertion/removal addElement(e); // at end setElementAt(e, r); // replace insertElememtAt(e, r); removeElementAt(r); removeElement(e); removeAllElements(); // search indexOf(e); lastIndexOf(e); Case Study: Java Vector: import util.Vector week 2b

  21. The Sequence ADT is the union of the Vector and List ADTs Elements accessed by Rank, or Position Generic methods: size(), isEmpty() Vector-based methods: elemAtRank(r), replaceAtRank(r, o), insertAtRank(r, o), removeAtRank(r) List-based methods: first(), last(), before(p), after(p), replaceElement(p, o), swapElements(p, q), insertBefore(p, o), insertAfter(p, o), insertFirst(o), insertLast(o), remove(p) Bridge methods: atRank(r), rankOf(p) Sequence ADT week 2b

  22. Applications of Sequences • The Sequence ADT is a basic, general-purpose, data structure for storing an ordered collection of elements • Direct applications: • Generic replacement for stack, queue, vector, or list • small database (e.g., address book) • Indirect applications: • Building block of more complex data structures week 2b

  23. We use a circular array storing positions A position object stores: Element Rank Indices f and l keep track of first and last positions Array-based Implementation elements 0 1 2 3 positions S f l week 2b

  24. Sequence Implementations week 2b

  25. Case Study: Bubble sort • Keep passing through the sequence of data, exchanging adjacent elements if necessary, when no exchanges are required on some pass, the sequence is sorted. week 2b

  26. Example: week 2b

  27. Supplementary methods: private static int valAtRank(Sequence S, int i){ return ((Integer) S.elemAtRank(i)).intValue(); } private static int valAtPos(Position p){ return ((Integer) p.element()).intValue(); } week 2b

  28. Bubble-sort using ranks: Public static void bubbleSort1(Sequence S){ int n = S.size(); for (int i = 0; i<n; i++) for (int j = 1; j<n-i; j++) if (valAtRank(S, j-1) > valAtRank(S, j)) S.swapElements(S.atRank(j-1), S.atRank(j)); } week 2b

  29. Bubble-sort using position: Public static void bubbleSort2(Sequence S){ Position prec, succ; int n = S.size(); for(int i = 0; i<n; i++){ prec = S.first(); for (int j = 1; j<n-i; j++){ succ = S.after(prec); if (valAtPos(prec) > valAtPos(succ)) S.swapElements(prec, succ); prec = succ; } } } week 2b

  30. An iterator abstracts the process of scanning through a collection of elements Methods of the ObjectIterator ADT: object object() boolean hasNext() object nextObject() reset() Extends the concept of Position by adding a traversal capability Implementation with an array or singly linked list An iterator is typically associated with an another data structure We can augment the Stack, Queue, Vector, List and Sequence ADTs with method: ObjectIterator elements() Two notions of iterator: snapshot: freezes the contents of the data structure at a given time dynamic: follows changes to the data structure Iterators week 2b

More Related