Learning materials

Linear ADTs

On this page

Linear ADTs model an ordered (not sorted) homogenous list of data. There are several common types of linear ADTs that differ in Behaviors.

Try list, stack, queue, and deque operations in our ADT Explorer.

Common Linear ADTs

List

  • Characteristics
    • Sequential - the elements are ordered in a sequence
    • Finite - known number of elements
    • Indexable - each element has a unique positional index to allow random access
    • Dynamic - the size of the list can change
  • Behaviors
    • add/remove/access by index
    • search (find index or pointer by value)
    • find size
    • check empty
  • Implementation
    • C array (fast access/read by index)
    • linked-list (fast add/remove in the middle)

Stack

  • Characteristics
    • Finite
    • Last-in-first-out (LIFO)
    • Dynamic
  • Behaviors
    • push
    • pop
    • peek/top
    • check empty
  • Implementation
    • C array (add/remove at the tail, limited max length)
    • linked-list (add/remove at either end, unlimited max length)
  • Application
    • Backtracking algorithm
    • Depth-first traversal

Queue

  • Characteristics
    • Finite
    • First-in-first-out (FIFO)
    • Dynamic
  • Behaviors
    • enqueue
    • dequeue
    • check empty
  • Implementation
    • circular C array (limited max length)
    • linked-list (unlimited max length)
  • Application
    • Breadth-first traversal

Deque

  • Characteristics
    • Finite
    • First-in-first-out (FIFO) and Last-in-first-out (LIFO)
    • Dynamic
  • Behaviors
    • enqueue_front, enqueue_back
    • dequeue_front, dequeue_back
    • check empty
  • Implementation
    • circular C array (limited max length)
    • linked-list (unlimited max length)
    • vector of vectors (std::deque in C++ STL)

Data Structures to Implement Linear ADTs

There are many data structures suitable in the implementation of the above ADTs. They should be selected according to the requirements.

  • C style Array
    • Fast indexing
    • Slow insertion, or pre-pending
    • Fast appending
    • Slow to change capacity (with re-allocation and data movement)
    • Circular variation (suitable for queue and deque)
  • Linked-list
    • Fast insertion, appending, pre-pending
    • Slow indexing
    • Complex logics
    • More space overhead
  • Related STL containers and their implementations
    • std::array
      • fixed size
      • static C array
    • std::vector
      • resizable (slow)
      • dynamic C array
    • std::list
      • doubly-linked-list
    • std::forward_list
      • singly-linked-list
    • std::deque
      • vector of vectors
    • std::stack
      • wrapper of other STL containers
    • std::queue
      • wrapper of other STL containers