{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2bbc5d9c",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Linked Lists\n",
    "#### CS 66: Introduction to Computer Science II"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "773a6458",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## References for this lecture\n",
    "\n",
    "Problem Solving with Algorithms and Data Structures using Python\n",
    "\n",
    "\n",
    "Section 3.6 (Big O of list operations): [https://runestone.academy/ns/books/published/pythonds/AlgorithmAnalysis/Lists.html](https://runestone.academy/ns/books/published/pythonds/AlgorithmAnalysis/Lists.html)\n",
    "\n",
    "Section 4.5, 4.6 (Stack implementation), 4.19-4.23: [https://runestone.academy/ns/books/published/pythonds/BasicDS/toctree.html](https://runestone.academy/ns/books/published/pythonds/BasicDS/toctree.html)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "529d22ba",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Group Activity Problem 1\n",
    "\n",
    "Review: We've seen the textbook's description of the Stack ADT. Here it is.\n",
    "\n",
    "These are the following operations that all stacks should have:\n",
    "\n",
    "* `Stack()` creates a new stack that is empty. It needs no parameters and returns an empty stack.\n",
    "* `push(item)` adds a new item to the top of the stack. It needs the item and returns nothing.\n",
    "* `pop()` removes the top item from the stack. It needs no parameters and returns the item. The stack is modified.\n",
    "* `peek()` returns the top item from the stack but _does not remove it_. It needs no parameters. The stack is not modified.\n",
    "* `isEmpty()` tests to see whether the stack is empty. It needs no parameters and returns a boolean value.\n",
    "* `size()` returns the number of items on the stack. It needs no parameters and returns an integer.\n",
    "\n",
    "Create a class that implements this. It should be very similar to the Queue class from last time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f605af80",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "e33f69bd",
   "metadata": {},
   "source": [
    "## Group Activity Problem 2\n",
    "\n",
    "What is the Big O of each of the following for your definition of a Stack?\n",
    "\n",
    "* `push`\n",
    "* `pop`\n",
    "* `peek`\n",
    "* `size`\n",
    "\n",
    "How does this compare to the Queue we made last time?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30263128",
   "metadata": {},
   "source": [
    "## Group Activity Problem 3\n",
    "\n",
    "Discuss the following question, and make sure to write the answer in your notes: What is the difference between and Abstract Data Type and a Data Structure?"
   ]
  },
  {
   "attachments": {
    "emptyarray.png": {
     "image/png": "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aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrAwNMxAAAAHGlET1QAAAACAAAAAAAAACkAAAAoAAAAKQAAACkAABy0vOBSdwAAHIBJREFUeAHsXc1yHMWy7rkvABHAViM2x7A59tleCEu8wDU7dhr5CWxewCNe4B77BSR5xw78ApbNzxqbSwSwwfbdYiLgBc6c/LKcUrstHUvqzi/DoS8j7B7NjCpVX1VmffVVdfVsZdbJhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAiBFARmEuJTcFWhQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBBwBCfHqCEJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIAQSEZAQnwiuihYCQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgIV59QAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhEAiAhLiE8FV0UJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIAQkxKsPCAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEEhEQEJ8IrgqWggIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhICEePUBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAokISIhPBFdFCwEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBgtxN++fbv76aefug8//LB75513utls1q1Wq0Nk8fO//rWy9w/feunF8PsvfWg/oCx8B9b/7nfffde9++673QcffPDSZ/3vxO9M5f/XX3/tfv/99+7jjz92n/3/wm9c4zP8PMY//MEv6vnee++9hG34wDX8xjU+O6//X375pXv+/Hn30UcfHYt/lB/X8BvX/vunrT/8/Wp+L1ld0bawk9o/yo9r+I1r//3X+f/222/968e1a5b/wDfiJv7e4XVq/yfFzdBv/DyF/59//rl7/scf3cfWl4Y2bK/h52P8o66Imb/97ZL14WHJ7eep/Q9zBMp/Xf9DHU+y09Tf48ZyxKVLl17JEZn+gS8McRM4xjXqM7V/5EPEDvJh5Aj4Cr9xndo/6jqb/Zflw/+Ool+6ht+4xof4+bztj3qi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"
    }
   },
   "cell_type": "markdown",
   "id": "b8634959",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Linked List vs. Array Philosophy\n",
    "\n",
    "A __list__ can be implemented using either an _array-based_ or _link-based_ data structure.\n",
    "\n",
    "The Python `list` type is implmented as an array. An array keeps track of the data in _consecutive memory locations_\n",
    "\n",
    "(here is a blank memory diagram that we may draw on in the lecture)\n",
    "\n",
    "\n",
    "<div>\n",
    "    <img src=\"attachment:emptyarray.png\" width=\"auto\"/>\n",
    "</div>\n",
    "\n",
    "A __linked list__ allows each item to be anywhere in the computer's memory. It allocates enough space for only one item at a time, and each one keeps track of where the next one is in memory.\n",
    "\n",
    "\n",
    "<div>\n",
    "    <img src=\"attachment:emptyarray.png\" width=\"auto\"/>\n",
    "</div>\n",
    "\n"
   ]
  },
  {
   "attachments": {
    "linkedlist.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "58c2640b",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## A picture of a linked list\n",
    "\n",
    "Linked lists are often drawn like this. Let's talk about what these symbols mean.\n",
    "\n",
    "\n",
    "<div>\n",
    "<img src=\"attachment:linkedlist.png\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69a6e98f",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## A class for representing a node in a linked list\n",
    "\n",
    "\n",
    "A linked list node has two attributes, the data it holds and a reference to the next node in the list.\n",
    "\n",
    "Here is the `Node` class presented in the textbook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "48c26dd6",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Node:\n",
    "    def __init__(self,initdata):\n",
    "        self.data = initdata\n",
    "        self.next = None\n",
    "\n",
    "    def getData(self):\n",
    "        return self.data\n",
    "\n",
    "    def getNext(self):\n",
    "        return self.next\n",
    "\n",
    "    def setData(self,newdata):\n",
    "        self.data = newdata\n",
    "\n",
    "    def setNext(self,newnext):\n",
    "        self.next = newnext"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fe5fd4c",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Let's create some nodes and practice setting them up as a linked list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6a02075b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: <__main__.Node object at 0x1106e6ce0> a's data: A , next: None\n",
      "b: <__main__.Node object at 0x1106e7ac0> b's data: B , next: None\n",
      "c: <__main__.Node object at 0x1106e6a70> c's data: C , next: None\n",
      "a: <__main__.Node object at 0x1106e6ce0> a's data: A , next: <__main__.Node object at 0x1106e7ac0>\n",
      "b: <__main__.Node object at 0x1106e7ac0> b's data: B , next: <__main__.Node object at 0x1106e6a70>\n",
      "c: <__main__.Node object at 0x1106e6a70> c's data: C , next: None\n"
     ]
    }
   ],
   "source": [
    "a = Node(\"A\")\n",
    "b = Node(\"B\")\n",
    "c = Node(\"C\")\n",
    "\n",
    "print(\"a:\",a,\"a's data:\",a.getData(),\", next:\",a.getNext())\n",
    "print(\"b:\",b,\"b's data:\",b.getData(),\", next:\",b.getNext())\n",
    "print(\"c:\",c,\"c's data:\",c.getData(),\", next:\",c.getNext())\n",
    "\n",
    "a.setNext(b)\n",
    "b.setNext(c)\n",
    "\n",
    "print(\"a:\",a,\"a's data:\",a.getData(),\", next:\",a.getNext())\n",
    "print(\"b:\",b,\"b's data:\",b.getData(),\", next:\",b.getNext())\n",
    "print(\"c:\",c,\"c's data:\",c.getData(),\", next:\",c.getNext())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9bcaeb0",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## An Unordered List Data Structure based on a Linked List\n",
    "\n",
    "We previously looked at the UnorderedList ADT:\n",
    "\n",
    "> * `List()` creates a new list that is empty. It needs no parameters and returns an empty list.\n",
    "> * `add(item)` adds a new item to the list. It needs the item and returns nothing. Assume the item is not already in the list.\n",
    "> * `remove(item)` removes the item from the list. It needs the item and modifies the list. Assume the item is present in the list.\n",
    "> * `search(item)` searches for the item in the list. It needs the item and returns a boolean value.\n",
    "> * `isEmpty()` tests to see whether the list is empty. It needs no parameters and returns a boolean value.\n",
    "> * `size()` returns the number of items in the list. It needs no parameters and returns an integer.\n",
    "> * `append(item)` adds a new item to the end of the list making it the last item in the collection. It needs the item and returns nothing. Assume the item is not already in the list.\n",
    "> * `index(item)` returns the position of item in the list. It needs the item and returns the index. Assume the item is in the list.\n",
    "> * `insert(pos,item)` adds a new item to the list at position pos. It needs the item and returns nothing. Assume the item is not already in the list and there are enough existing items to have position pos.\n",
    "> * `pop()` removes and returns the last item in the list. It needs nothing and returns an item. Assume the list has at least one item.\n",
    "> * `pop(pos)` removes and returns the item at position pos. It needs the position and returns the item. Assume the item is in the list.\n",
    "\n",
    "We also talked about how the built-in Python `list` type is a pretty good match for this.\n",
    "\n",
    "Now, we will implement the ADT as a linked list - following Section 4.21 in the book"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "38d4067f",
   "metadata": {},
   "outputs": [],
   "source": [
    "class UnorderedList:\n",
    "\n",
    "    def __init__(self):\n",
    "        self.head = None\n",
    "        \n",
    "    def isEmpty(self):\n",
    "        return self.head == None\n",
    "    \n",
    "    #this method is really a prepend - it puts the new node at the beginning\n",
    "    def add(self,item):\n",
    "        temp = Node(item)\n",
    "        temp.setNext(self.head)\n",
    "        self.head = temp"
   ]
  },
  {
   "attachments": {
    "addtohead.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "4d7cde6f",
   "metadata": {},
   "source": [
    "\n",
    "<div>\n",
    "<img src=\"attachment:addtohead.png\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3ed3b7be",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "my_list = UnorderedList()\n",
    "print(my_list.isEmpty())\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "print(my_list.isEmpty())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb9b02e5",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Traversing a linked list\n",
    "\n",
    "Some of the operations you need to perform with a linked list require you to traverse (i.e., loop over) all/many items in the list.\n",
    "\n",
    "For example, if I wanted to display each item in a list, I could do it with a loop as in the `display()` method below:\n",
    "\n",
    "_we're going to add on to the book example_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "16e33c57",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "class UnorderedList:\n",
    "\n",
    "    def __init__(self):\n",
    "        self.head = None\n",
    "        \n",
    "    def isEmpty(self):\n",
    "        return self.head == None\n",
    "    \n",
    "    #this method is really a prepend - it puts the new node at the beginning\n",
    "    def add(self,item):\n",
    "        temp = Node(item)\n",
    "        temp.setNext(self.head)\n",
    "        self.head = temp\n",
    "        \n",
    "    def display(self):\n",
    "        current = self.head #start with the Node at the head\n",
    "        while current: #this will keep going until current equals None\n",
    "            print(current.getData()) #display the current Node's data\n",
    "            current = current.getNext() #move on to the next Node in the list"
   ]
  },
  {
   "attachments": {
    "traverse.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "e12502fa",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "<div>\n",
    "<img src=\"attachment:traverse.png\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "46a83244",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "54\n",
      "26\n",
      "93\n",
      "17\n",
      "77\n",
      "31\n"
     ]
    }
   ],
   "source": [
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "my_list.display()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0b62137",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Let's do it with `__repr__` instead"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "63249c25",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "54 -> 26 -> 93 -> 17 -> 77 -> 31 -> None\n"
     ]
    }
   ],
   "source": [
    "class UnorderedList:\n",
    "\n",
    "    def __init__(self):\n",
    "        self.head = None\n",
    "        \n",
    "    def isEmpty(self):\n",
    "        return self.head == None\n",
    "    \n",
    "    #this method is really a prepend - it puts the new node at the beginning\n",
    "    def add(self,item):\n",
    "        temp = Node(item)\n",
    "        temp.setNext(self.head)\n",
    "        self.head = temp\n",
    "            \n",
    "    def __repr__(self):\n",
    "        list_representation = \"\"\n",
    "        current = self.head #start with the Node at the head\n",
    "        while current: #this will keep going until current equals None\n",
    "            list_representation += str(current.getData())+\" -> \"\n",
    "            current = current.getNext() #move on to the next Node in the list\n",
    "        list_representation += \"None\" #the last one in the list points to None\n",
    "        return list_representation\n",
    "            \n",
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "print(my_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36868886",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Traversing to get an item by its index\n",
    "\n",
    "If you want to get an item by its index, you need to traverse the list and count until you find it.\n",
    "\n",
    "_Note:_ This is not one of the methods that is listed in the ADT, but I think it is ok to allow it since it's something that you can do with a built-in Python list.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0ae538b5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "54 -> 26 -> 93 -> 17 -> 77 -> 31 -> None\n",
      "17\n",
      "31\n"
     ]
    }
   ],
   "source": [
    "class UnorderedList:\n",
    "\n",
    "    def __init__(self):\n",
    "        self.head = None\n",
    "        \n",
    "    def isEmpty(self):\n",
    "        return self.head == None\n",
    "    \n",
    "    #this method is really a prepend - it puts the new node at the beginning\n",
    "    def add(self,item):\n",
    "        temp = Node(item)\n",
    "        temp.setNext(self.head)\n",
    "        self.head = temp\n",
    "            \n",
    "    def __repr__(self):\n",
    "        list_representation = \"\"\n",
    "        current = self.head #start with the Node at the head\n",
    "        while current: #this will keep going until current equals None\n",
    "            list_representation += str(current.getData())+\" -> \"\n",
    "            current = current.getNext() #move on to the next Node in the list\n",
    "        list_representation += \"None\" #the last one in the list points to None\n",
    "        return list_representation\n",
    "    \n",
    "    def get(self,index):\n",
    "        \n",
    "        if index < 0:\n",
    "            raise Exception(\"list index \"+str(index)+\" is out of range\")\n",
    "        \n",
    "        current = self.head\n",
    "        item_counter = 0\n",
    "        \n",
    "        while current and item_counter < index:\n",
    "            \n",
    "            current = current.getNext()\n",
    "            item_counter += 1\n",
    "            \n",
    "        if current == None:\n",
    "            raise Exception(\"list index \"+str(index)+\" is out of range\")\n",
    "            \n",
    "        return current.getData()\n",
    "            \n",
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "print(my_list)\n",
    "\n",
    "print(my_list.get(3))\n",
    "\n",
    "print(my_list.get(5))"
   ]
  },
  {
   "attachments": {
    "traverse.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "91e2cc6d",
   "metadata": {},
   "source": [
    "\n",
    "<div>\n",
    "<img src=\"attachment:traverse.png\" />\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6a70fb1",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## The `__getitem__` magic method\n",
    "\n",
    "And we can instead implement `__getitem__` in place of our `get` method, which will allow us to use `[ ]` notation instead"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "98513e1e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "54 -> 26 -> 93 -> 17 -> 77 -> 31 -> None\n",
      "17\n",
      "31\n"
     ]
    }
   ],
   "source": [
    "class UnorderedList:\n",
    "\n",
    "    def __init__(self):\n",
    "        self.head = None\n",
    "        \n",
    "    def isEmpty(self):\n",
    "        return self.head == None\n",
    "    \n",
    "    #this method is really a prepend - it puts the new node at the beginning\n",
    "    def add(self,item):\n",
    "        temp = Node(item)\n",
    "        temp.setNext(self.head)\n",
    "        self.head = temp\n",
    "            \n",
    "    def __repr__(self):\n",
    "        list_representation = \"\"\n",
    "        current = self.head #start with the Node at the head\n",
    "        while current: #this will keep going until current equals None\n",
    "            list_representation += str(current.getData())+\" -> \"\n",
    "            current = current.getNext() #move on to the next Node in the list\n",
    "        list_representation += \"None\" #the last one in the list points to None\n",
    "        return list_representation\n",
    "    \n",
    "    def __getitem__(self,index):\n",
    "        \n",
    "        if index < 0:\n",
    "            raise Exception(\"list index \"+str(index)+\" is out of range\")\n",
    "        \n",
    "        current = self.head\n",
    "        item_counter = 0\n",
    "        \n",
    "        while current and item_counter < index:\n",
    "            \n",
    "            current = current.getNext()\n",
    "            item_counter += 1\n",
    "            \n",
    "        if current == None:\n",
    "            raise Exception(\"list index \"+str(index)+\" is out of range\")\n",
    "            \n",
    "        return current.getData()\n",
    "            \n",
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "print(my_list)\n",
    "\n",
    "print(my_list[3])\n",
    "\n",
    "print(my_list[5])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0b67b92",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## Group Activity Problem 4\n",
    "\n",
    "Note that the ADT description includes a `search` operation. Add this to your `UnorderedList` class.\n",
    "\n",
    "_Hint:_ You will need to do a traversal like with `get`, but you're going to be looking for a value in the list that matches your item.\n",
    "\n",
    "_Hint 2:_ You can find a solution to this exercise in the book: [https://runestone.academy/ns/books/published/pythonds/BasicDS/ImplementinganUnorderedListLinkedLists.html](https://runestone.academy/ns/books/published/pythonds/BasicDS/ImplementinganUnorderedListLinkedLists.html)\n",
    "\n",
    "It should work with code like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "097b933c",
   "metadata": {},
   "outputs": [],
   "source": [
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "print(my_list)\n",
    "\n",
    "print( my_list.search(17) ) #should print True\n",
    "print( my_list.search(34) ) #should print False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f913ce0",
   "metadata": {},
   "source": [
    "## Group Activity Problem 5\n",
    "\n",
    "Create a method called `__contains__` that otherwise is the same as your `search` method.\n",
    "\n",
    "This allow you to write code as below. Discuss in your group what the difference is between these two approaches."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "810a704d",
   "metadata": {},
   "outputs": [],
   "source": [
    "my_list = UnorderedList()\n",
    "\n",
    "my_list.add(31)\n",
    "my_list.add(77)\n",
    "my_list.add(17)\n",
    "my_list.add(93)\n",
    "my_list.add(26)\n",
    "my_list.add(54)\n",
    "print(my_list)\n",
    "\n",
    "print( 17 in my_list ) #should print True\n",
    "print( 34 in my_list ) #should print False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4339b5e4",
   "metadata": {},
   "source": [
    "## Group Activity Problem 6\n",
    "\n",
    "What is the Big O of `get`/`__getitem__` and `search`/`__contains__`?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d3831cd",
   "metadata": {},
   "source": [
    "## Group Activity Problem 7\n",
    "\n",
    "What things from the ADT do we still have left to implement? Write down a to-do list."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93ea89bb",
   "metadata": {},
   "source": [
    "## Group Activity Problem 8\n",
    "\n",
    "Take a look at the implementation of the `size` method in the book ([https://runestone.academy/ns/books/published/pythonds/BasicDS/ImplementinganUnorderedListLinkedLists.html](https://runestone.academy/ns/books/published/pythonds/BasicDS/ImplementinganUnorderedListLinkedLists.html)). What is the Big O of that approach?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de401b12",
   "metadata": {},
   "source": [
    "## Group Activity Problem 9\n",
    "\n",
    "I claim that it is possible to do `size` in $O(1)$ time. Discuss ideas for how you might pull that off."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80c3bdcf",
   "metadata": {},
   "source": [
    "## Group Activity Problem 10\n",
    "\n",
    "Come up with a strategy for how you would implement `append` - just describe the approach, you don't actually have to code it up. What would the Big O of that approach be? Can you think of any ways to improve it?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9bf384d",
   "metadata": {},
   "source": [
    "## Group Activity Problem 11\n",
    "\n",
    "How do the complexities of the methods we've discussed so far compare with the complexities of Python lists ([https://runestone.academy/ns/books/published/pythonds/AlgorithmAnalysis/Lists.html](https://runestone.academy/ns/books/published/pythonds/AlgorithmAnalysis/Lists.html) )? Which things are the same? Which things are Python lists better at? Which things are linked lists better at?"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
