Close
Register
Close Window

CSE101P

Chapter 5 Chapter2: LinkedLists

| About   «  4.2. The Dictionary ADT   ::   Contents   ::   5.2. List Iteration Visualizations  »

5.1. Lists

5.1.1. Lists

5.1.1.1. Lists

A list is a finite, ordered sequence of data items.

Important concept: List elements have a position.

Notation: \(<a_0, a_1, …, a_{n-1}>\)

What operations should we implement?

5.1.1.2. List Implementation Concepts

Our list implementation will support the concept of a current position.

Operations will act relative to the current position.

\(<20, 23\ |\ 12, 15>\)

5.1.1.3. List ADT (1)

5.1.1.4. List ADT (2)

5.1.1.5. List ADT (3)

5.1.1.6. List ADT Examples

List: \(<12\ |\ 32, 15>\)

L.insert(99);

Result: \(<12\ |\ 99, 32, 15>\)

Iterate through the whole list:

5.1.1.7. List Find Function

5.1.1.8. Array-Based List Class (1)

5.1.1.9. Array-Based List Insert

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.11. Linked List Position (1)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.12. Linked List Position (2)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.13. Linked List Position (3)

We will add list header and list trailer nodes. This eliminates all the special cases.


5.1.1.14. Design Principle: Design to Avoid Special Cases

Adding list header/trailer nodes add a little space and (simple) code to the list class constructor.
However, adding them avoids dealing with special cases that potentially involve bug-prone code
Avoids writing code for most special cases when inserting into empty list, at head of list, or at end of list.
Avoids writing code for most special cases when deleting first, last, or only element in list.

5.1.1.15. Linked List Class (1)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.16. Linked List Class (2)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.17. Insertion

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.18. Removal

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.19. Prev

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.20. Overhead

  • Container classes store elements. Those take space.

  • Container classes also store additional space to organize the elements.

    • This is called overhead

  • The overhead fraction is: overhead/total space

5.1.1.21. Comparison of Implementations

Array-Based Lists:
Insertion and deletion are \(\Theta(n)\).
Prev and direct access are \(\Theta(1)\).
Array must be allocated in advance.
No overhead if all array positions are full.
Linked Lists:
Insertion and deletion are \(\Theta(1)\).
Prev and direct access are \(\Theta(n)\).
Space grows with number of elements.
Every element requires overhead.

5.1.1.22. Space Comparison

“Break-even” point:

\(DE = n(P + E)\)

\(n = \frac{DE}{P + E}\)

E: Space for data value.

P: Space for pointer.

D: Number of elements in array.

5.1.1.23. Space Example

  • Array-based list: Overhead is one pointer (8 bytes) per position in array – whether used or not.

  • Linked list: Overhead is two pointers per link node one to the element, one to the next link

  • Data is the same for both.

  • When is the space the same?

    • When the array is half full

5.1.1.24. Freelist

System new and garbage collection are slow.

  • Add freelist support to the Link class.

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.25. Doubly Linked Lists

5.1.1.26. Doubly Linked Node (1)

5.1.1.27. Doubly Linked Insert

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.1.1.28. Doubly Linked Remove

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

   «  4.2. The Dictionary ADT   ::   Contents   ::   5.2. List Iteration Visualizations  »

Close Window