본문으로 이동
Scientific Inference Lab
자료구조
Structure and
Cost
↗
Data
Abstraction
↗
Data Abstraction
Operations and Semantics
ADT Specifications
Choosing an ADT
Data Abstraction and ADTs
Interfaces
↗
Interface and Specification
Representation and Work
Python Objects
Two Implementations
Interfaces and Implementations
Measuring
Cost
↗
Timing a Run
Counting Operations
Loops and Input Size
Python Operations
Running Time and Operation Counts
Reasoning About
Growth
↗
Growth Rate
Asymptotic Bounds
Reading Code as a Function
Best Worst and Average
Growth Rates and Asymptotic Notation
Storing Elements in a
Row
↗
Contiguous Storage
Backing Array
Cost of Shifting
What Arrays Are Good For
Arrays
When the Array Fills
Up
↗
Capacity and Resize
Amortized Cost
Inside Python Lists
Circular Arrays
Dynamic Arrays
Giving Up
Contiguity
↗
Singly Linked Nodes
References and Aliasing
Linked-List Representation
Walking the
References
↗
Linked List Traversal
Linked List Search
Linked List Updates
Linked-List Operations
Links Both
Ways
↗
Doubly Linked Lists
Sentinel Nodes
Doubly Linked Lists
Same List, Different
Costs
↗
Arrays vs Linked Lists
Operation Mix
Arrays and Linked Lists
Last In, First
Out
↗
Stack ADT
Stack Expression Processing
Call Stack
Stacks
First In, First
Out
↗
Queue ADT
Queue Simulations
Deque ADT
Queues and Deques
Keys to
Indices
↗
Hash Tables
Hash Functions
Separate Chaining
Hash Tables and Chaining
Finding the Next Open
Slot
↗
Load Factor and Resizing
Open Addressing Probes
Tombstones
Open Addressing
From Links to Hierarchies
When Do We Visit the Root