{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Queues Overview\n", "\n", "In this lecture we will get an overview of what a Queue is, in the next lecture we will implement our own Queue class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "____\n", "A **queue** is an ordered collection of items where the addition of new items happens at one end, called the “rear,” and the removal of existing items occurs at the other end, commonly called the “front.” As an element enters the queue it starts at the rear and makes its way toward the front, waiting until that time when it is the next element to be removed.\n", "\n", "The most recently added item in the queue must wait at the end of the collection. The item that has been in the collection the longest is at the front. This ordering principle is sometimes called **FIFO, first-in first-out**. It is also known as “first-come first-served.”\n", "\n", "The simplest example of a queue is the typical line that we all participate in from time to time. We wait in a line for a movie, we wait in the check-out line at a grocery store, and we wait in the cafeteria line. The first person in that line is also the first person to get serviced/helped. \n", "\n", "Let's see a diagram which shows this and compares it to the Stack Data Structure:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "url = 'https://netmatze.files.wordpress.com/2014/08/queue.png'\n", "Image(url)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note how we have two terms here, **Enqueue** and **Dequeue**. The enqueue term describes when we add a new item to the rear of the queue. The dequeue term describes removing the front item from the queue.\n", "\n", "Let's take a look at how pop and push methods would work with a Queue (versus that of a Stack):" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "ename": "HTTPError", "evalue": "HTTP Error 404: Not Found", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mHTTPError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0murl2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'http://www.csit.parkland.edu/~mbrandyberry/CS2Java/Lessons/Stack_Queue/images/QueuePushPop.jpg'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mImage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/.local/lib/python3.8/site-packages/IPython/core/display.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, url, filename, format, embed, width, height, retina, unconfined, metadata)\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretina\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mretina\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1230\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munconfined\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0munconfined\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1231\u001b[0;31m super(Image, self).__init__(data=data, url=url, filename=filename, \n\u001b[0m\u001b[1;32m 1232\u001b[0m metadata=metadata)\n\u001b[1;32m 1233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.8/site-packages/IPython/core/display.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, url, filename, metadata)\u001b[0m\n\u001b[1;32m 635\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetadata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 636\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 637\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 638\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 639\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.8/site-packages/IPython/core/display.py\u001b[0m in \u001b[0;36mreload\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1261\u001b[0m \u001b[0;34m\"\"\"Reload the raw data from file or URL.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1262\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0membed\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1263\u001b[0;31m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mImage\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1264\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretina\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1265\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_retina_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.8/site-packages/IPython/core/display.py\u001b[0m in \u001b[0;36mreload\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 665\u001b[0m \u001b[0;31m# Deferred import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0murllib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0murlopen\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 667\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0murlopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 668\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 669\u001b[0m \u001b[0;31m# extract encoding from header, if there is one:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 220\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 221\u001b[0m \u001b[0mopener\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_opener\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 222\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mopener\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 223\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 224\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minstall_opener\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mopener\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 529\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mprocessor\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprocess_response\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprotocol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 530\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprocessor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmeth_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 531\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmeth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 532\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 533\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36mhttp_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m 638\u001b[0m \u001b[0;31m# request was successfully received, understood, and accepted.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 639\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m200\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0mcode\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m300\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 640\u001b[0;31m response = self.parent.error(\n\u001b[0m\u001b[1;32m 641\u001b[0m 'http', request, response, code, msg, hdrs)\n\u001b[1;32m 642\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36merror\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m 567\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhttp_err\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'default'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'http_error_default'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0morig_args\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 569\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_chain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 570\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 571\u001b[0m \u001b[0;31m# XXX probably also want an abstract factory that knows when it makes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36m_call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 500\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhandler\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mhandlers\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 501\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmeth_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 502\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 503\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.8/urllib/request.py\u001b[0m in \u001b[0;36mhttp_error_default\u001b[0;34m(self, req, fp, code, msg, hdrs)\u001b[0m\n\u001b[1;32m 647\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mHTTPDefaultErrorHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mBaseHandler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 648\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mhttp_error_default\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhdrs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 649\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mHTTPError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfull_url\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhdrs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 650\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 651\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mHTTPRedirectHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mBaseHandler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mHTTPError\u001b[0m: HTTP Error 404: Not Found" ] } ], "source": [ "url2 = 'http://www.csit.parkland.edu/~mbrandyberry/CS2Java/Lessons/Stack_Queue/images/QueuePushPop.jpg'\n", "Image(url2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "You should now have a basic understanding of Queues and the FIFO principal for them. In the next lecture we will implement our own Queue class!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 1 }