Files
G4G0-2/Data Structures/AI Notes/Linear List.md
2025-03-16 18:59:42 +00:00

92 lines
4.1 KiB
Markdown
Executable File

# The Abstract Data Type: Linear List
This study material provides a concise overview of the Abstract Data Type (ADT) known as the Linear List, focusing on its implementation using linked lists, particularly doubly-linked lists. Understanding these concepts is crucial for effectively managing data structures in programming.
## Implementing ADT Linear List
The Linear List can be implemented using different structures, including linked lists. The main focus here is on:
- Linear List based on LinkedList
- Doubly-linked list
Each of these implementations has its unique characteristics, advantages, and considerations.
## Sizes of Primitive Data Types
Understanding the size of primitive types is fundamental in memory allocation:
- **boolean & byte** - 1 byte
- **char & short** - 2 bytes
- **int & float** - 4 bytes
- **long & double** - 8 bytes
It's important to note that, in modern 64-bit Java Virtual Machines (JVM), the minimum size of an object is 16 bytes due to the header size and padding requirements.
## Linked List vs. Array List
When comparing Array Lists and Linked Lists:
- **Addition and Removal**: Linked Lists excel in scenarios where frequent addition and removal of elements are required due to their dynamic size and absence of resizing overhead.
- **Memory Overhead**: Linked Lists consume more memory because each node contains a reference to both the next and, in doubly-linked lists, the previous node, which increases complexity and size.
## Memory Allocation Concepts
Memory allocation for both primitive types and objects follows specific rules:
For instance, when assigning one variable to another: each variable allocated for an object points to the memory address where the object is stored. This is evidenced when variables such as **smith** and **jones** point to the same **Account** object, illustrating memory referencing in Java.
## Understanding Linked Lists
A linked list is a collection of nodes where each node contains data and a reference (or pointer) to the next node, allowing for efficient insertion and deletion operations. Linked lists can store various types of information, making them versatile data structures.
### Operations on Linked Lists
Some common operations performed on linked lists include:
- **Insertion**: Nodes may be inserted at the beginning, middle, or end of the list, requiring adjustments of pointers accordingly.
- **Removal**: Similar to insertion, removal requires accessing the right node and adjusting pointers to maintain list integrity.
### Algorithm Visualizations
Visual representations can help understand operations such as inserting or deleting nodes. For example, to insert a node in a linked list, one must:
1. Create the new node.
2. Adjust the pointers of the surrounding nodes to include the new node.
## Doubly-Linked Lists
Doubly-linked lists add an extra pointer, allowing traversal in both forward and backward directions, enhancing flexibility:
- **Advantages**: They can traverse in both directions and manage dynamic memory more efficiently.
- **Disadvantages**: They require more memory for pointers and tend to have slower access times due to their random memory allocation.
### Inserting and Deleting in Doubly-Linked Lists
The process of inserting or deleting nodes involves managing the **prev** and **next** pointers to maintain the structure of the list. As illustrated:
1. For insertion, properly link the new node with its neighbors.
2. For deletion, ensure that surrounding nodes bypass the removed node, effectively maintaining list integrity.
## Key Takeaways
In conclusion, choosing between an array and a linked list largely depends on the intended operations:
- **Arrays** are optimal for scenarios where quick search operations are prioritized.
- **Linked Lists** are preferred for scenarios where insertion and deletion operations are frequent, with variations including:
- **Singly Linked List**: Best suited for simple sequential access and minimal memory overhead.
- **Doubly Linked List**: Ideal when navigating both forwards and backwards is necessary.
Understanding these structures and their operations is essential for effective programming and data management.