UGent Algoritmen 1
  • Introduction
  • Algorithms
    • Insertion Sort
    • Shell Sort
    • Selection Sort
    • Heap Sort
    • Merge Sort
    • Quick Sort
    • Dual Pivot QuickSort
    • Radix Exchange Sort
  • Data Structures
    • Containers
    • Backtracking with Trees
    • Graphs
    • Dictionaries
    • HashTables
Powered by GitBook
On this page
  • 2. Containers
  • 2.1. Table
  • 2.2. List
  • 2.3. Stack
  • 2.4. Queue
  • 2.5. Deque
  • 2.6. Priority Queue
  • 2.6.1. DES
  • 2.7. Tree

Was this helpful?

  1. Data Structures

Containers

2. Containers

2.1. Table

  • Is directly supported by the internal memory of a computer

  • Has a fixed size

  • Adding elements is O(1), but at a full table the performance is worse (but amortised this is still O(1)).

2.2. List

  • Variable size

  • Nodes can be fragmented in the memory.

  • Only the ends are easy to reach.

  • Closing list has multiple possibilities:

    • nullpointer as last element

    • pointer to temp node that points to itself.

    • pointer to temp node that points to first node (ring list).

2.3. Stack

  • Several operations:

    • push (add on top)

    • pop (remove from top, last in first out (LIFO))

    • isEmpty (Test if empty)

    • top (get top element)

  • We can use a linked list or normal list to create this.

  • Performance is O(1) for both the implementations.

  • One of the most used structures.

2.4. Queue

  • Several operations:

    • enqueue (add)

    • dequeue (remove, first in first our principle (FIFO))

    • isEmpty

  • Implementation uses a table:

    • Remove and add elements at the same side

    • 2 pointers, one to head and one to tail

    • when one of the indexes reaches one end of the table, start from the beginning.

  • Implementation uses a linked list:

    • Add at the end of the list

    • Remove the front

    • no problems with indexes and table size.

  • Performance is O(1) for both.

2.5. Deque

  • Combination of stack and queue.

  • We can add at both sides

2.6. Priority Queue

  • Several operations:

    • Add

    • Remove

    • isEmpty

  • Different implementations:

    • Sorted table: Sort by priority, highest priority is O(1), smallest is O(n)

    • Unsorted table: Adding is O(1), removing is O(n).

    • Binary Tree: Adding and removing is O(lg(n)), biggest priority is the root.

    • D-heap: tree with d childs, height is $log_d(n)$. Adding is $lg(d)$ and descending is $O(d*log_d(n))$.

    • Other: Sometimes needed to merge queues.

2.6.1. DES

DES stands for Discrete Event Simulation. Here we will simulate a machine that divides different tasks over multiple machines. When a task is then done they will get merged. Simulating these tasks helps us to see which machines we need to buy.

DES works with discrete events, these happen on a specific moment in time. These events are handled one by one. Some events are dependent on each other, because of this we might need to wait till they are finished.

2.7. Tree

  • One of the most important datastructures.

  • A tree has nodes and edges that are connected to each other

  • There are no loops!

  • Most of the time 1 root node

  • Every node is a sub tree

  • Some algorithms use a collection of trees == forest

  • Amount of children is the grade of the node

  • A full tree is if we have n children for an n tree on the depth given.

  • We use a table as implementation

  • 3 Different ways to perform a tree walk (means that we will go over the nodes recursively, this also uses a stack):

    • inorder: First left child, then root and then the right child.

    • preorder: First root, then left child and then the right child

    • postorder: First left child, then right child and then the root.

  • We can also go through the tree from the top to the bottom from left to right, this is called level order.

A special algorithm used with trees is backtracking, for this please see the next chapter.

PreviousData StructuresNextBacktracking with Trees

Last updated 6 years ago

Was this helpful?