Data Structures and Algorithms in Java - List Data Structures
List Data Structure
- Sequential data structure: sequence of items of a given base type
- Implemented as an array/dynamic array or a linked list.
- ADT operations: getFirst(), getLast(), getNext(p), getPrev(p), get(p), set(p,x), insert(p,x), remove(p),removeFirst(), removeLast(), removeNext(p), removePrev(p), find(x),size()
Drawbacks of Arrays
- Require size information for creation.
- Inserting/deleting elements in the middle requires shifting other elements.
Self-Referential Structures
- Object that references another object of its own type.
- Used to create chains of data (e.g., linked lists, trees).
Linked Lists
- Collection of nodes storing data and links to other nodes.
- Linear data structure composed of nodes.
- Types:
- Singly-Linked List
- Doubly-Linked List
- Linear data structures: Array, Linked List, Stack, Queue
- Non-Linear data structures: Tree, Graph
Singly Linked Lists
- Node includes two datafields: info and next.
- 'info' stores information.
- 'next' links to the successor.
- Implementation includes methods like add(), traverse(), search(), dele(), isEmpty(), and clear().
- Operations: Inserting a new node at the beginning/end and deleting a node from the beginning/end of the list.
Circular Lists
- Nodes form a ring; the list is finite, and each node has a successor.
- Operations: Inserting nodes at the front/end.
- Applications:
- Round-Robin Scheduling: implemented using
rotate() to move the first element to the end of the list.
Doubly Linked Lists
- Each node has two reference fields:
prev and next. - Operations: Adding/Deleting a new node at the end.
Lists in java.util
- LinkedList class:
add(E o): Appends the specified element to the end of this list.addFirst(E o): Inserts the given element at the beginning of this list.addLast(E o): Appends the given element to the end of this list.clear(): Removes all of the elements from this list.get(int index): Returns the element at the specified position in this list.getFirst(): Returns the first element in this list.getLast(): Returns the last element in this list.remove(int index): Removes the element at the specified position in this list.removeFirst(): Removes and returns the first element from this list.removeLast(): Removes and returns the last element from this list.size(): Returns the number of elements in this list.toArray(): Returns an array containing all of the elements in this list in the correct order.
- ArrayList class:
add(E o): Appends the specified element to the end of this list.add(int index, E o): Inserts the given element at the specified pos.clear(): Removes all of the elements from this list.get(int index): Returns the element at the specified position in this list.remove(int index): Removes the element at the specified position in this list.size(): Returns the number of elements in this list.ensureCapacity(int minCapacity): Increases the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument.trimToSize(): Trims the capacity of this ArrayList instance to be the list's current size.toArray(): Returns an array containing all of the elements in this list in the correct order.