diff options
Diffstat (limited to 'Data_Structures_and_Algorithms_in_Java/ch5.ipynb')
-rw-r--r-- | Data_Structures_and_Algorithms_in_Java/ch5.ipynb | 981 |
1 files changed, 929 insertions, 52 deletions
diff --git a/Data_Structures_and_Algorithms_in_Java/ch5.ipynb b/Data_Structures_and_Algorithms_in_Java/ch5.ipynb index 6ac7b766..ecd02576 100644 --- a/Data_Structures_and_Algorithms_in_Java/ch5.ipynb +++ b/Data_Structures_and_Algorithms_in_Java/ch5.ipynb @@ -1,6 +1,7 @@ { "metadata": { - "name": "ch5" + "name": "", + "signature": "sha256:78657e06ea6117b67568778cbd053fe193ae0df563d1cdc0a431335e7e291192" }, "nbformat": 3, "nbformat_minor": 0, @@ -11,25 +12,89 @@ "cell_type": "heading", "level": 1, "metadata": {}, - "source": "Chapter 5 : Linked Lists" + "source": [ + "Chapter 5 : Linked Lists" + ] }, { "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.1 Page No : 190" + "source": [ + "Example 5.1 Page No : 190" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nExample 5.1\nLink List\n'''\n\nclass Link:\n def __init__(self,i,dd):\n self.iData = i\n self.dData = dd\n self.next = None\n\n def displayLink(self): # display ourself\n print '{' , self.iData , ', ' , self.dData , '} ' ,\n\nclass LinkList:\n def __init__(self):\n self.first = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self,i, dd):\n # make new link\n newLink = Link(i, dd)\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n self.first = self.first.next\n return temp\n \n def displayList(self):\n print 'List (first-->last): ' ,\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\ntheList = LinkList() # make new list\ntheList.insertFirst(22,2.99)\ntheList.insertFirst(44,4.99)\ntheList.insertFirst(66,6.99)\ntheList.insertFirst(88,8.99)\ntheList.displayList()\n\nwhile( not theList.isEmpty() ): # until it's empty,\n aLink = theList.deleteFirst() # delete link\n print 'Deleted ' , # display it\n aLink.displayLink()\n print ''\n \ntheList.displayList()", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,i,dd):\n", + " self.iData = i\n", + " self.dData = dd\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display ourself\n", + " print '{' , self.iData , ', ' , self.dData , '} ' ,\n", + "\n", + "class LinkList:\n", + " def __init__(self):\n", + " self.first = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self,i, dd):\n", + " # make new link\n", + " newLink = Link(i, dd)\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " self.first = self.first.next\n", + " return temp\n", + " \n", + " def displayList(self):\n", + " print 'List (first-->last): ' ,\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + "theList = LinkList() # make new list\n", + "theList.insertFirst(22,2.99)\n", + "theList.insertFirst(44,4.99)\n", + "theList.insertFirst(66,6.99)\n", + "theList.insertFirst(88,8.99)\n", + "theList.displayList()\n", + "\n", + "while( not theList.isEmpty() ): # until it's empty,\n", + " aLink = theList.deleteFirst() # delete link\n", + " print 'Deleted ' , # display it\n", + " aLink.displayLink()\n", + " print ''\n", + " \n", + "theList.displayList()" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "List (first-->last): { 88 , 8.99 } { 66 , 6.99 } { 44 , 4.99 } { 22 , 2.99 } \nDeleted { 88 , 8.99 } \nDeleted { 66 , 6.99 } \nDeleted { 44 , 4.99 } \nDeleted { 22 , 2.99 } \nList (first-->last): \n" + "text": [ + "List (first-->last): { 88 , 8.99 } { 66 , 6.99 } { 44 , 4.99 } { 22 , 2.99 } \n", + "Deleted { 88 , 8.99 } \n", + "Deleted { 66 , 6.99 } \n", + "Deleted { 44 , 4.99 } \n", + "Deleted { 22 , 2.99 } \n", + "List (first-->last): \n" + ] } ], "prompt_number": 1 @@ -38,19 +103,108 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.2 Page No : 193" + "source": [ + "Example 5.2 Page No : 193" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nExample 5.2\ndemonstrates linked list\n'''\nclass Link:\n def __init__(self,i,dd):\n self.iData = i\n self.dData = dd\n self.next = None\n\n def displayLink(self): # display ourself\n print '{' , self.iData , ', ' , self.dData , '} ' ,\n\nclass LinkList:\n def __init__(self):\n self.first = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self,i, dd):\n # make new link\n newLink = Link(i, dd)\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n self.first = self.first.next\n return temp\n \n def displayList(self):\n print 'List (first-->last): ' ,\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\n def find(self,key): # find link with given key\n current = self.first #start at first\n while(current.iData != key): # while no match,\n if(current.next == None): # if end of list,\n return None # didnt find it\n else:\n current = current.next # go to next link\n return current\n \n def delete(self,key): # delete link with given key\n current = self.first \n previous = self.first\n while(current.iData != key):\n if(current.next == None):\n return None # didnt find it\n else:\n previous = current\n current = current.next\n if(current == self.first): # if first link,\n self.first = self.first.next\n else:\n previous.next = current.next\n return current\n\n\ntheList = LinkList() # make list\ntheList.insertFirst(22,2.99)\ntheList.insertFirst(44,4.99)\ntheList.insertFirst(66,6.99)\ntheList.insertFirst(88,8.99)\ntheList.displayList() # display list\nf = theList.find(44) # find item\nif( f != None):\n print 'Found link with key ' , f.iData\nelse:\n print \"Can't find link\"\nd = theList.delete(66) # delete item\nif( d != None ):\n print \"Deleted link with key \" , d.iData\nelse:\n print \"Can't delete link\"\n\ntheList.displayList()", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,i,dd):\n", + " self.iData = i\n", + " self.dData = dd\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display ourself\n", + " print '{' , self.iData , ', ' , self.dData , '} ' ,\n", + "\n", + "class LinkList:\n", + " def __init__(self):\n", + " self.first = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self,i, dd):\n", + " # make new link\n", + " newLink = Link(i, dd)\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " self.first = self.first.next\n", + " return temp\n", + " \n", + " def displayList(self):\n", + " print 'List (first-->last): ' ,\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + " def find(self,key): # find link with given key\n", + " current = self.first #start at first\n", + " while(current.iData != key): # while no match,\n", + " if(current.next == None): # if end of list,\n", + " return None # didnt find it\n", + " else:\n", + " current = current.next # go to next link\n", + " return current\n", + " \n", + " def delete(self,key): # delete link with given key\n", + " current = self.first \n", + " previous = self.first\n", + " while(current.iData != key):\n", + " if(current.next == None):\n", + " return None # didnt find it\n", + " else:\n", + " previous = current\n", + " current = current.next\n", + " if(current == self.first): # if first link,\n", + " self.first = self.first.next\n", + " else:\n", + " previous.next = current.next\n", + " return current\n", + "\n", + "\n", + "theList = LinkList() # make list\n", + "theList.insertFirst(22,2.99)\n", + "theList.insertFirst(44,4.99)\n", + "theList.insertFirst(66,6.99)\n", + "theList.insertFirst(88,8.99)\n", + "theList.displayList() # display list\n", + "f = theList.find(44) # find item\n", + "if( f != None):\n", + " print 'Found link with key ' , f.iData\n", + "else:\n", + " print \"Can't find link\"\n", + "d = theList.delete(66) # delete item\n", + "if( d != None ):\n", + " print \"Deleted link with key \" , d.iData\n", + "else:\n", + " print \"Can't delete link\"\n", + "\n", + "theList.displayList()" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "List (first-->last): { 88 , 8.99 } { 66 , 6.99 } { 44 , 4.99 } { 22 , 2.99 } \nFound link with key 44\nDeleted link with key 66\nList (first-->last): { 88 , 8.99 } { 44 , 4.99 } { 22 , 2.99 } \n" + "text": [ + "List (first-->last): { 88 , 8.99 } { 66 , 6.99 } { 44 , 4.99 } { 22 , 2.99 } \n", + "Found link with key 44\n", + "Deleted link with key 66\n", + "List (first-->last): { 88 , 8.99 } { 44 , 4.99 } { 22 , 2.99 } \n" + ] } ], "prompt_number": 2 @@ -59,19 +213,87 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.3 Page NO :198" + "source": [ + "Example 5.3 Page NO :198" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nExample 5.3\ndemonstrates list with first and last references\n'''\nclass Link:\n def __init__(self,d):\n self.dData = d\n self.next = None\n\n def displayLink(self): # display ourself\n print self.dData , \n\nclass FirstLastList:\n def __init__(self):\n self.first = None\n self.last = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self, dd):\n # make new link\n newLink = Link(dd)\n if (self.isEmpty()):\n self.last = newLink\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n if self.first.next ==None:\n self.last = None\n self.first = self.first.next\n return temp\n\n def insertLast(self,dd): # insert at end of list\n newLink = Link(dd) # make new link\n if( self.isEmpty() ): # if empty list,\n self.first = newLink # first --> newLink\n else:\n self.last.next = newLink # old last --> newLink\n self.last = newLink # newLink <-- last\n\n def displayList(self):\n print 'List (first-->last): ' ,\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\n\ntheList = FirstLastList()\ntheList.insertFirst(22) \ntheList.insertLast(11)\ntheList.insertFirst(44) \ntheList.insertLast(33) \ntheList.insertFirst(66) \ntheList.insertLast(55) \ntheList.displayList() # display the list\ntheList.deleteFirst() \ntheList.deleteFirst() \ntheList.displayList() # display again", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,d):\n", + " self.dData = d\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display ourself\n", + " print self.dData , \n", + "\n", + "class FirstLastList:\n", + " def __init__(self):\n", + " self.first = None\n", + " self.last = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self, dd):\n", + " # make new link\n", + " newLink = Link(dd)\n", + " if (self.isEmpty()):\n", + " self.last = newLink\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " if self.first.next ==None:\n", + " self.last = None\n", + " self.first = self.first.next\n", + " return temp\n", + "\n", + " def insertLast(self,dd): # insert at end of list\n", + " newLink = Link(dd) # make new link\n", + " if( self.isEmpty() ): # if empty list,\n", + " self.first = newLink # first --> newLink\n", + " else:\n", + " self.last.next = newLink # old last --> newLink\n", + " self.last = newLink # newLink <-- last\n", + "\n", + " def displayList(self):\n", + " print 'List (first-->last): ' ,\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + "\n", + "theList = FirstLastList()\n", + "theList.insertFirst(22) \n", + "theList.insertLast(11)\n", + "theList.insertFirst(44) \n", + "theList.insertLast(33) \n", + "theList.insertFirst(66) \n", + "theList.insertLast(55) \n", + "theList.displayList() # display the list\n", + "theList.deleteFirst() \n", + "theList.deleteFirst() \n", + "theList.displayList() # display again" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "List (first-->last): 66 44 22 11 33 55 \nList (first-->last): 22 11 33 55 \n" + "text": [ + "List (first-->last): 66 44 22 11 33 55 \n", + "List (first-->last): 22 11 33 55 \n" + ] } ], "prompt_number": 3 @@ -80,19 +302,90 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.4 Page No : 204" + "source": [ + "Example 5.4 Page No : 204" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nexample 5.4\ndemonstrates a stack implemented as a list\n'''\nclass Link:\n def __init__(self,dd):\n self.dData = dd\n self.next = None\n\n def displayLink(self): # display ourself\n print self.dData , \n\nclass LinkList:\n def __init__(self):\n self.first = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self, dd):\n # make new link\n newLink = Link( dd)\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n self.first = self.first.next\n return temp\n \n def displayList(self):\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\nclass LinkStack:\n def __init__(self):\n self.theList = LinkList()\n\n def push(self,j): # put item on top of stack\n self.theList.insertFirst(j)\n\n def pop(self): # take item from top of stack\n return self.theList.deleteFirst()\n\n def isEmpty(self):\n return ( self.theList.isEmpty() )\n\n def displayStack(self):\n print 'Stack (top-->bottom): ' ,\n self.theList.displayList()\n\ntheStack = LinkStack() # make stack\ntheStack.push(20)\ntheStack.push(40) \ntheStack.displayStack() # display stack\n\ntheStack.push(60) # push items\ntheStack.push(80) \ntheStack.displayStack() # display stack\ntheStack.pop() \ntheStack.pop() \ntheStack.displayStack() # display stack", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,dd):\n", + " self.dData = dd\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display ourself\n", + " print self.dData , \n", + "\n", + "class LinkList:\n", + " def __init__(self):\n", + " self.first = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self, dd):\n", + " # make new link\n", + " newLink = Link( dd)\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " self.first = self.first.next\n", + " return temp\n", + " \n", + " def displayList(self):\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + "class LinkStack:\n", + " def __init__(self):\n", + " self.theList = LinkList()\n", + "\n", + " def push(self,j): # put item on top of stack\n", + " self.theList.insertFirst(j)\n", + "\n", + " def pop(self): # take item from top of stack\n", + " return self.theList.deleteFirst()\n", + "\n", + " def isEmpty(self):\n", + " return ( self.theList.isEmpty() )\n", + "\n", + " def displayStack(self):\n", + " print 'Stack (top-->bottom): ' ,\n", + " self.theList.displayList()\n", + "\n", + "theStack = LinkStack() # make stack\n", + "theStack.push(20)\n", + "theStack.push(40) \n", + "theStack.displayStack() # display stack\n", + "\n", + "theStack.push(60) # push items\n", + "theStack.push(80) \n", + "theStack.displayStack() # display stack\n", + "theStack.pop() \n", + "theStack.pop() \n", + "theStack.displayStack() # display stack" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "Stack (top-->bottom): 40 20 \nStack (top-->bottom): 80 60 40 20 \nStack (top-->bottom): 40 20 \n" + "text": [ + "Stack (top-->bottom): 40 20 \n", + "Stack (top-->bottom): 80 60 40 20 \n", + "Stack (top-->bottom): 40 20 \n" + ] } ], "prompt_number": 4 @@ -101,19 +394,104 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.5 Page No : 207" + "source": [ + "Example 5.5 Page No : 207" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nExample 5.5\ndemonstrates queue implemented as double-ended list\n'''\n\nclass Link:\n def __init__(self,d): # constructor\n self.dData = d\n self.next = None\n\n def displayLink(self): # display this link\n print self.dData ,\n\nclass FirstLastList:\n def __init__(self):\n self.first = None\n self.last = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self, dd):\n # make new link\n newLink = Link(dd)\n if (self.isEmpty()):\n self.last = newLink\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n if self.first.next ==None:\n self.last = None\n self.first = self.first.next\n return temp\n\n def insertLast(self,dd): # insert at end of list\n newLink = Link(dd) # make new link\n if( self.isEmpty() ): # if empty list,\n self.first = newLink # first --> newLink\n else:\n self.last.next = newLink # old last --> newLink\n self.last = newLink # newLink <-- last\n \n def displayList(self):\n print 'List (first-->last): ' ,\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\n\nclass LinkQueue:\n def __init__(self):\n self.theList = FirstLastList() # make a 2-ended list\n\n def isEmpty(self): # true if queue is empty\n return self.theList.isEmpty()\n \n def insert(self,j): # insert, rear of queue\n self.theList.insertLast(j)\n \n def remove(self): # remove, front of queue\n return self.theList.deleteFirst()\n \n def displayQueue(self):\n print 'Queue (front-->rear): ' , \n self.theList.displayList()\n\ntheQueue = LinkQueue()\ntheQueue.insert(20) # insert items\ntheQueue.insert(40) \ntheQueue.displayQueue() # display queue\ntheQueue.insert(60) # insert items\ntheQueue.insert(80) \ntheQueue.displayQueue() # display queue\ntheQueue.remove() # remove items\ntheQueue.remove() \ntheQueue.displayQueue() # display queue", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,d): # constructor\n", + " self.dData = d\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display this link\n", + " print self.dData ,\n", + "\n", + "class FirstLastList:\n", + " def __init__(self):\n", + " self.first = None\n", + " self.last = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self, dd):\n", + " # make new link\n", + " newLink = Link(dd)\n", + " if (self.isEmpty()):\n", + " self.last = newLink\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " if self.first.next ==None:\n", + " self.last = None\n", + " self.first = self.first.next\n", + " return temp\n", + "\n", + " def insertLast(self,dd): # insert at end of list\n", + " newLink = Link(dd) # make new link\n", + " if( self.isEmpty() ): # if empty list,\n", + " self.first = newLink # first --> newLink\n", + " else:\n", + " self.last.next = newLink # old last --> newLink\n", + " self.last = newLink # newLink <-- last\n", + " \n", + " def displayList(self):\n", + " print 'List (first-->last): ' ,\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + "\n", + "class LinkQueue:\n", + " def __init__(self):\n", + " self.theList = FirstLastList() # make a 2-ended list\n", + "\n", + " def isEmpty(self): # true if queue is empty\n", + " return self.theList.isEmpty()\n", + " \n", + " def insert(self,j): # insert, rear of queue\n", + " self.theList.insertLast(j)\n", + " \n", + " def remove(self): # remove, front of queue\n", + " return self.theList.deleteFirst()\n", + " \n", + " def displayQueue(self):\n", + " print 'Queue (front-->rear): ' , \n", + " self.theList.displayList()\n", + "\n", + "theQueue = LinkQueue()\n", + "theQueue.insert(20) # insert items\n", + "theQueue.insert(40) \n", + "theQueue.displayQueue() # display queue\n", + "theQueue.insert(60) # insert items\n", + "theQueue.insert(80) \n", + "theQueue.displayQueue() # display queue\n", + "theQueue.remove() # remove items\n", + "theQueue.remove() \n", + "theQueue.displayQueue() # display queue" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "Queue (front-->rear): List (first-->last): 20 40 \nQueue (front-->rear): List (first-->last): 20 40 60 80 \nQueue (front-->rear): List (first-->last): 60 80 \n" + "text": [ + "Queue (front-->rear): List (first-->last): 20 40 \n", + "Queue (front-->rear): List (first-->last): 20 40 60 80 \n", + "Queue (front-->rear): List (first-->last): 60 80 \n" + ] } ], "prompt_number": 5 @@ -122,19 +500,80 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.6 Page No : 215" + "source": [ + "Example 5.6 Page No : 215" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nexample 5.6\ndemonstrates sorted list\n'''\n\nclass Link:\n def __init__(self,d): # constructor\n self.dData = d\n self.next = None\n\n def displayLink(self): # display this link\n print self.dData ,\n\nclass SortedList:\n def __init__(self):\n self.first = None\n\n def isEmpty(self): # true if no links\n return (self.first==None)\n\n def insert(self,key): # insert, in order\n newLink = Link(key) # make new link\n previous = None\n current = self.first # until end of list,\n while(current != None and key > current.dData):\n previous = current\n current = current.next\n if(previous==None): # at beginning of list\n self.first = newLink\n else: # not at beginning\n previous.next = newLink\n newLink.next = current\n\n def remove(self): # return & delete first link\n temp = self.first # save first\n self.first = self.first.next # delete first\n return temp\n\n def displayList(self):\n print \"List (first-->last): \" ,\n current = self.first # start at beginning of listSorted Lists\n while(current != None): # until end of list,\n current.displayLink()\n current = current.next # move to next link\n print ''\n\n# create new list\ntheSortedList = SortedList()\ntheSortedList.insert(20) # insert 2 items\ntheSortedList.insert(40)\ntheSortedList.displayList() # display list\ntheSortedList.insert(10)\ntheSortedList.insert(30)\ntheSortedList.insert(50) # insert 3 more items\ntheSortedList.displayList() # display list\ntheSortedList.remove() # remove an item\ntheSortedList.displayList() # display list", + "input": [ + " \n", + "\n", + "class Link:\n", + " def __init__(self,d): # constructor\n", + " self.dData = d\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display this link\n", + " print self.dData ,\n", + "\n", + "class SortedList:\n", + " def __init__(self):\n", + " self.first = None\n", + "\n", + " def isEmpty(self): # true if no links\n", + " return (self.first==None)\n", + "\n", + " def insert(self,key): # insert, in order\n", + " newLink = Link(key) # make new link\n", + " previous = None\n", + " current = self.first # until end of list,\n", + " while(current != None and key > current.dData):\n", + " previous = current\n", + " current = current.next\n", + " if(previous==None): # at beginning of list\n", + " self.first = newLink\n", + " else: # not at beginning\n", + " previous.next = newLink\n", + " newLink.next = current\n", + "\n", + " def remove(self): # return & delete first link\n", + " temp = self.first # save first\n", + " self.first = self.first.next # delete first\n", + " return temp\n", + "\n", + " def displayList(self):\n", + " print \"List (first-->last): \" ,\n", + " current = self.first # start at beginning of listSorted Lists\n", + " while(current != None): # until end of list,\n", + " current.displayLink()\n", + " current = current.next # move to next link\n", + " print ''\n", + "\n", + "# create new list\n", + "theSortedList = SortedList()\n", + "theSortedList.insert(20) # insert 2 items\n", + "theSortedList.insert(40)\n", + "theSortedList.displayList() # display list\n", + "theSortedList.insert(10)\n", + "theSortedList.insert(30)\n", + "theSortedList.insert(50) # insert 3 more items\n", + "theSortedList.displayList() # display list\n", + "theSortedList.remove() # remove an item\n", + "theSortedList.displayList() # display list" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "List (first-->last): 20 40 \nList (first-->last): 10 20 30 40 50 \nList (first-->last): 20 30 40 50 \n" + "text": [ + "List (first-->last): 20 40 \n", + "List (first-->last): 10 20 30 40 50 \n", + "List (first-->last): 20 30 40 50 \n" + ] } ], "prompt_number": 6 @@ -143,19 +582,97 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.7 Page No : 218" + "source": [ + "Example 5.7 Page No : 218" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nexample 5.7\ndemonstrates sorted list used for sorting\n'''\nclass Link:\n def __init__(self,d): # constructor\n self.dData = d\n self.next = None\n\n def displayLink(self): # display this link\n print self.dData ,\n\nclass SortedList:\n def __init__(self,linkArr = None):\n if linkArr == None:\n self.first = None\n else:\n self.first = None # initialize list\n for j in range(len(linkArr)):\n self.insert( linkArr[j] )\n\n def isEmpty(self): # true if no links\n return (self.first==None)\n\n def insert(self,k): # insert, in order\n previous = None\n current = self.first # until end of list,\n while(current != None and k.dData > current.dData):\n previous = current\n current = current.next\n if(previous==None): # at beginning of list\n self.first = k\n else: # not at beginning\n previous.next = k\n k.next = current\n\n def remove(self): # return & delete first link\n temp = self.first # save first\n self.first = self.first.next # delete first\n return temp\n\n def displayList(self):\n print \"List (first-->last): \" ,\n current = self.first # start at beginning of listSorted Lists\n while(current != None): # until end of list,\n current.displayLink()\n current = current.next # move to next link\n print ''\n\n\nsize = 10 # create array of links\nlinkArray = []\nimport random\nfor j in range(size): # fill array with links\n # random number\n n = int(random.random()*99)\n newLink = Link(n) # make link\n linkArray.append(newLink) # put in array\n\n# display array contents\nprint 'Unsorted array: ',\nfor j in range(size):\n print linkArray[j].dData , \nprint ''\n\n# create new list\n# initialized with array\ntheSortedList = SortedList(linkArray)\nlinkArray = []\nfor j in range(size): # links from list to array\n linkArray.append( theSortedList.remove())\n# display array contents\nprint 'Sorted Array: ',\nfor j in range(size):\n print linkArray[j].dData ,", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,d): # constructor\n", + " self.dData = d\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display this link\n", + " print self.dData ,\n", + "\n", + "class SortedList:\n", + " def __init__(self,linkArr = None):\n", + " if linkArr == None:\n", + " self.first = None\n", + " else:\n", + " self.first = None # initialize list\n", + " for j in range(len(linkArr)):\n", + " self.insert( linkArr[j] )\n", + "\n", + " def isEmpty(self): # true if no links\n", + " return (self.first==None)\n", + "\n", + " def insert(self,k): # insert, in order\n", + " previous = None\n", + " current = self.first # until end of list,\n", + " while(current != None and k.dData > current.dData):\n", + " previous = current\n", + " current = current.next\n", + " if(previous==None): # at beginning of list\n", + " self.first = k\n", + " else: # not at beginning\n", + " previous.next = k\n", + " k.next = current\n", + "\n", + " def remove(self): # return & delete first link\n", + " temp = self.first # save first\n", + " self.first = self.first.next # delete first\n", + " return temp\n", + "\n", + " def displayList(self):\n", + " print \"List (first-->last): \" ,\n", + " current = self.first # start at beginning of listSorted Lists\n", + " while(current != None): # until end of list,\n", + " current.displayLink()\n", + " current = current.next # move to next link\n", + " print ''\n", + "\n", + "\n", + "size = 10 # create array of links\n", + "linkArray = []\n", + "import random\n", + "for j in range(size): # fill array with links\n", + " # random number\n", + " n = int(random.random()*99)\n", + " newLink = Link(n) # make link\n", + " linkArray.append(newLink) # put in array\n", + "\n", + "# display array contents\n", + "print 'Unsorted array: ',\n", + "for j in range(size):\n", + " print linkArray[j].dData , \n", + "print ''\n", + "\n", + "# create new list\n", + "# initialized with array\n", + "theSortedList = SortedList(linkArray)\n", + "linkArray = []\n", + "for j in range(size): # links from list to array\n", + " linkArray.append( theSortedList.remove())\n", + "# display array contents\n", + "print 'Sorted Array: ',\n", + "for j in range(size):\n", + " print linkArray[j].dData ," + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "Unsorted array: 28 87 63 12 73 91 30 91 85 65 \nSorted Array: 12 28 30 63 65 73 85 87 91 91\n" + "text": [ + "Unsorted array: 28 87 63 12 73 91 30 91 85 65 \n", + "Sorted Array: 12 28 30 63 65 73 85 87 91 91\n" + ] } ], "prompt_number": 7 @@ -164,19 +681,155 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.8 Page no : 226" + "source": [ + "Example 5.8 Page no : 226" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nExample 5.8\ndemonstrates doubly-linked list\n'''\nclass Link:\n def __init__(self,d): # constructor\n self.dData = d\n self.next = None\n self.previous = None\n\n def displayLink(self): # display this link\n print self.dData ,\n\nclass DoublyLinkedList:\n def __init__(self):\n self.first = None # no items on list yet\n self.last = None\n\n def isEmpty(self): # true if no links\n return self.first==None\n\n def insertFirst(self,dd): # insert at front of list\n newLink = Link(dd) # make new link\n if( self.isEmpty() ): # if empty list, \n self.last = newLink # newLink <-- last\n else:\n self.first.previous = newLink # newLink <-- old first\n newLink.next = self.first # newLink --> old first\n self.first = newLink # first --> newLink\n\n def insertLast(self,dd): # insert at end of list\n newLink = Link(dd) # make new link\n if( self.isEmpty() ) : # if empty list,\n self.first = newLink # first --> newLink\n else:\n self.last.next = newLink # old last --> newLink\n newLink.previous = self.last # old last <-- newLink\n self.last = newLink # newLink <-- last\n\n def deleteFirst(self): # delete first link\n # (assumes non-empty list)\n temp = self.first\n if(self.first.next == None): # if only one item\n self.last = None # None <-- last\n else:\n self.first.next.previous = None # None <-- old next\n self.first = self.first.next # first --> old next\n return temp\n\n def deleteLast(self): # delete last link\n # (assumes non-empty list)\n temp = self.last\n if(self.first.next == None): # if only one item\n self.first = None # first --> None\n else:\n self.last.previous.next = None # old previous --> None\n self.last = self.last.previous # old previous <-- last\n return temp\n\n # insert dd just after key\n def insertAfter(self,key,dd):\n # (assumes non-empty list)\n current = self.first # start at beginning\n while(current.dData != key): # until match is found,\n current = current.next # move to next link\n if(current == None):\n return False # didnt find it\n newLink = Link(dd) # make new link\n if(current==self.last): # if last link,\n newLink.next = None # newLink --> None\n self.last = newLink# newLink <-- last\n else: # not last link,\n newLink.next = current.next # newLink --> old next # newLink <-- old next\n current.next.previous = newLink\n newLink.previous = current # old current <-- newLink\n current.next = newLink # old current --> newLink\n return True # found it, did insertion\n\n def deleteKey(self,key): # delete item w/ given key\n # (assumes non-empty list)\n current = self.first # start at beginningDoubly Linked Lists\n while(current.dData != key):\n current = current.next\n if(current == None):\n return None\n if(current==self.first):\n self.first = current.next\n else: \n # until match is found, move to next link didnt find it found it first item? first --> old next\n # not first old previous --> old next\n current.previous.next = current.next\n if(current==self.last):\n self.last = current.previous\n else:\n # last item? old previous <-- last not last old previous <-- old next \n current.next.previous = current.previous\n return current # return value\n\n def displayForward(self):\n print 'List (first-->last): ',\n current = self.first # start at beginning\n while(current != None): # until end of list,\n current.displayLink()# display data\n current = current.next # move to next link\n print ''\n\n def displayBackward(self):\n print 'List (last-->first): ' ,\n current = self.last # start at end\n while(current != None): # until start of list,\n current.displayLink() # display data\n current = current.previous # move to previous link\n print ''\n\n# make a new list\ntheList = DoublyLinkedList()\ntheList.insertFirst(22) # insert at front\ntheList.insertFirst(44) \ntheList.insertFirst(66) \ntheList.insertLast(11) # insert at rear\ntheList.insertLast(33) \ntheList.insertLast(55) \ntheList.displayForward() # display list forward\ntheList.displayBackward() # display list backward\ntheList.deleteFirst() # delete first item\ntheList.deleteLast() # delete last item\ntheList.deleteKey(11) # delete item with key 11\ntheList.displayForward() # display list forward\ntheList.insertAfter(22, 77) # insert 77 after 22\ntheList.insertAfter(33, 88) # insert 88 after 33\ntheList.displayForward() # display list forward", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,d): # constructor\n", + " self.dData = d\n", + " self.next = None\n", + " self.previous = None\n", + "\n", + " def displayLink(self): # display this link\n", + " print self.dData ,\n", + "\n", + "class DoublyLinkedList:\n", + " def __init__(self):\n", + " self.first = None # no items on list yet\n", + " self.last = None\n", + "\n", + " def isEmpty(self): # true if no links\n", + " return self.first==None\n", + "\n", + " def insertFirst(self,dd): # insert at front of list\n", + " newLink = Link(dd) # make new link\n", + " if( self.isEmpty() ): # if empty list, \n", + " self.last = newLink # newLink <-- last\n", + " else:\n", + " self.first.previous = newLink # newLink <-- old first\n", + " newLink.next = self.first # newLink --> old first\n", + " self.first = newLink # first --> newLink\n", + "\n", + " def insertLast(self,dd): # insert at end of list\n", + " newLink = Link(dd) # make new link\n", + " if( self.isEmpty() ) : # if empty list,\n", + " self.first = newLink # first --> newLink\n", + " else:\n", + " self.last.next = newLink # old last --> newLink\n", + " newLink.previous = self.last # old last <-- newLink\n", + " self.last = newLink # newLink <-- last\n", + "\n", + " def deleteFirst(self): # delete first link\n", + " # (assumes non-empty list)\n", + " temp = self.first\n", + " if(self.first.next == None): # if only one item\n", + " self.last = None # None <-- last\n", + " else:\n", + " self.first.next.previous = None # None <-- old next\n", + " self.first = self.first.next # first --> old next\n", + " return temp\n", + "\n", + " def deleteLast(self): # delete last link\n", + " # (assumes non-empty list)\n", + " temp = self.last\n", + " if(self.first.next == None): # if only one item\n", + " self.first = None # first --> None\n", + " else:\n", + " self.last.previous.next = None # old previous --> None\n", + " self.last = self.last.previous # old previous <-- last\n", + " return temp\n", + "\n", + " # insert dd just after key\n", + " def insertAfter(self,key,dd):\n", + " # (assumes non-empty list)\n", + " current = self.first # start at beginning\n", + " while(current.dData != key): # until match is found,\n", + " current = current.next # move to next link\n", + " if(current == None):\n", + " return False # didnt find it\n", + " newLink = Link(dd) # make new link\n", + " if(current==self.last): # if last link,\n", + " newLink.next = None # newLink --> None\n", + " self.last = newLink# newLink <-- last\n", + " else: # not last link,\n", + " newLink.next = current.next # newLink --> old next # newLink <-- old next\n", + " current.next.previous = newLink\n", + " newLink.previous = current # old current <-- newLink\n", + " current.next = newLink # old current --> newLink\n", + " return True # found it, did insertion\n", + "\n", + " def deleteKey(self,key): # delete item w/ given key\n", + " # (assumes non-empty list)\n", + " current = self.first # start at beginningDoubly Linked Lists\n", + " while(current.dData != key):\n", + " current = current.next\n", + " if(current == None):\n", + " return None\n", + " if(current==self.first):\n", + " self.first = current.next\n", + " else: \n", + " # until match is found, move to next link didnt find it found it first item? first --> old next\n", + " # not first old previous --> old next\n", + " current.previous.next = current.next\n", + " if(current==self.last):\n", + " self.last = current.previous\n", + " else:\n", + " # last item? old previous <-- last not last old previous <-- old next \n", + " current.next.previous = current.previous\n", + " return current # return value\n", + "\n", + " def displayForward(self):\n", + " print 'List (first-->last): ',\n", + " current = self.first # start at beginning\n", + " while(current != None): # until end of list,\n", + " current.displayLink()# display data\n", + " current = current.next # move to next link\n", + " print ''\n", + "\n", + " def displayBackward(self):\n", + " print 'List (last-->first): ' ,\n", + " current = self.last # start at end\n", + " while(current != None): # until start of list,\n", + " current.displayLink() # display data\n", + " current = current.previous # move to previous link\n", + " print ''\n", + "\n", + "# make a new list\n", + "theList = DoublyLinkedList()\n", + "theList.insertFirst(22) # insert at front\n", + "theList.insertFirst(44) \n", + "theList.insertFirst(66) \n", + "theList.insertLast(11) # insert at rear\n", + "theList.insertLast(33) \n", + "theList.insertLast(55) \n", + "theList.displayForward() # display list forward\n", + "theList.displayBackward() # display list backward\n", + "theList.deleteFirst() # delete first item\n", + "theList.deleteLast() # delete last item\n", + "theList.deleteKey(11) # delete item with key 11\n", + "theList.displayForward() # display list forward\n", + "theList.insertAfter(22, 77) # insert 77 after 22\n", + "theList.insertAfter(33, 88) # insert 88 after 33\n", + "theList.displayForward() # display list forward" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": "List (first-->last): 66 44 22 11 33 55 \nList (last-->first): 55 33 11 22 44 66 \nList (first-->last): 44 22 33 \nList (first-->last): 44 22 77 33 88 \n" + "text": [ + "List (first-->last): 66 44 22 11 33 55 \n", + "List (last-->first): 55 33 11 22 44 66 \n", + "List (first-->last): 44 22 33 \n", + "List (first-->last): 44 22 77 33 88 \n" + ] } ], "prompt_number": 8 @@ -185,140 +838,364 @@ "cell_type": "heading", "level": 3, "metadata": {}, - "source": "Example 5.9 Page No : 235" + "source": [ + "Example 5.9 Page No : 235" + ] }, { "cell_type": "code", "collapsed": false, - "input": "'''\nexample 5.9\ndemonstrates iterators on a linked listListIterator\n'''\nclass Link:\n def __init__(self,d): # constructor\n self.dData = d\n self.next = None\n\n def displayLink(self): # display this link\n print self.dData ,\n\nclass LinkList:\n def __init__(self):\n self.first = None\n\n def isEmpty(self): # true if list is empty\n return (self.first==None)\n\n # insert at start of list\n def insertFirst(self,i, dd):\n # make new link\n newLink = Link(i, dd)\n newLink.next = self.first\n # newLink --> old first\n self.first = newLink\n\n def deleteFirst(self):\n temp = self.first\n self.first = self.first.next\n return temp\n \n def displayList(self):\n print 'List (first-->last): ' ,\n current = self.first\n while(current != None):\n current.displayLink()\n current = current.next\n print ''\n\n def find(self,key): # find link with given key\n current = self.first #start at first\n while(current.iData != key): # while no match,\n if(current.next == None): # if end of list,\n return None # didnt find it\n else:\n current = current.next # go to next link\n return current\n \n def delete(self,key): # delete link with given key\n current = self.first \n previous = self.first\n while(current.iData != key):\n if(current.next == None):\n return None # didnt find it\n else:\n previous = current\n current = current.next\n if(current == self.first): # if first link,\n self.first = self.first.next\n else:\n previous.next = current.next\n return current\n\n def getFirst(self): # get value of first\n return self.first\n\n def setFirst(self,f): # set first to new link\n self.first = f\n\n def getIterator(self): # return iterator\n return ListIterator(self) # initialized with\n\nclass ListIterator:\n def __init__(self,l): # constructor\n self.ourList = l\n self.reset()\n self.current = None\n self.previous = None\n\n def reset(self): # start at first\n self.current = self.ourList.getFirst()\n self.previous = None\n\n def atEnd(self): # true if last link\n return (self.current.next==None) \n \n def nextLink(self): # go to next link\n self.previous = self.current\n self.current = self.current.next\n\n def getCurrent(self): # get current link\n return self.current \n\n def insertAfter(self,dd): # insert after\n # current link\n newLink = Link(dd)\n if( self.ourList.isEmpty() ):# empty list\n self.ourList.setFirst(newLink)\n self.current = newLink\n else: # not empty\n newLink.next = self.current.next\n self.current.next = newLink\n self.nextLink() # point to new link\n\n def insertBefore(self,dd): # insert before\n # current link\n newLink = Link(dd)\n if(self.previous == None): # beginning of list (or empty list)\n newLink.next = self.ourList.getFirst()\n self.ourList.setFirst(newLink)\n self.reset()\n else: # not beginning\n newLink.next = self.previous.next\n self.previous.next = newLink\n self.current = newLink\n\n def deleteCurrent(self): # delete item at current\n value = self.current.dData\n if(self.previous == None): # beginning of list\n self.ourList.setFirst(self.current.next)\n self.reset()\n else: # not beginning\n self.previous.next = self.current.next\n if( self.atEnd() ):\n self.reset()\n else:\n current = current.next\n return value\n\ntheList = LinkList() # new list\niter1 = theList.getIterator() # new iter\niter1.insertAfter(20)\niter1.insertAfter(40)\niter1.insertAfter(80)\niter1.insertBefore(60) # insert items\nwhile(True):\n print 'Enter first letter of show, reset, ' , \n print 'next, get, before, after, delete: ' ,\n choice = raw_input() # get users option\n if choice == 's': # show list\n if( not theList.isEmpty() ):\n theList.displayList()\n else:\n print 'List is empty'\n elif choice == 'r': # reset (to first)\n iter1.reset()\n elif choice == 'n': # advance to next item\n if( not theList.isEmpty() and not iter1.atEnd() ):\n iter1.nextLink()\n else:\n print \"Cant go to next link\"\n elif choice=='g': # get current item\n if( not theList.isEmpty() ):\n value = iter1.getCurrent().dData\n print \"Returned \" , value\n else:\n print \"List is empty\"\n elif choice == 'b': # insert before current\n print \"Enter value to insert: \",\n value = raw_input()\n iter1.insertBefore(value)\n elif choice=='a': # insert after current\n print \"Enter value to insert: \",\n value = raw_input()\n iter1.insertAfter(value)\n elif choice == 'd': # delete current item\n if( not theList.isEmpty() ):\n value = iter1.deleteCurrent()\n print \"Deleted \" , value\n else:\n print \"Cant delete\"\n else:\n print \"Invalid entry\"\n break", + "input": [ + " \n", + "class Link:\n", + " def __init__(self,d): # constructor\n", + " self.dData = d\n", + " self.next = None\n", + "\n", + " def displayLink(self): # display this link\n", + " print self.dData ,\n", + "\n", + "class LinkList:\n", + " def __init__(self):\n", + " self.first = None\n", + "\n", + " def isEmpty(self): # true if list is empty\n", + " return (self.first==None)\n", + "\n", + " # insert at start of list\n", + " def insertFirst(self,i, dd):\n", + " # make new link\n", + " newLink = Link(i, dd)\n", + " newLink.next = self.first\n", + " # newLink --> old first\n", + " self.first = newLink\n", + "\n", + " def deleteFirst(self):\n", + " temp = self.first\n", + " self.first = self.first.next\n", + " return temp\n", + " \n", + " def displayList(self):\n", + " print 'List (first-->last): ' ,\n", + " current = self.first\n", + " while(current != None):\n", + " current.displayLink()\n", + " current = current.next\n", + " print ''\n", + "\n", + " def find(self,key): # find link with given key\n", + " current = self.first #start at first\n", + " while(current.iData != key): # while no match,\n", + " if(current.next == None): # if end of list,\n", + " return None # didnt find it\n", + " else:\n", + " current = current.next # go to next link\n", + " return current\n", + " \n", + " def delete(self,key): # delete link with given key\n", + " current = self.first \n", + " previous = self.first\n", + " while(current.iData != key):\n", + " if(current.next == None):\n", + " return None # didnt find it\n", + " else:\n", + " previous = current\n", + " current = current.next\n", + " if(current == self.first): # if first link,\n", + " self.first = self.first.next\n", + " else:\n", + " previous.next = current.next\n", + " return current\n", + "\n", + " def getFirst(self): # get value of first\n", + " return self.first\n", + "\n", + " def setFirst(self,f): # set first to new link\n", + " self.first = f\n", + "\n", + " def getIterator(self): # return iterator\n", + " return ListIterator(self) # initialized with\n", + "\n", + "class ListIterator:\n", + " def __init__(self,l): # constructor\n", + " self.ourList = l\n", + " self.reset()\n", + " self.current = None\n", + " self.previous = None\n", + "\n", + " def reset(self): # start at first\n", + " self.current = self.ourList.getFirst()\n", + " self.previous = None\n", + "\n", + " def atEnd(self): # true if last link\n", + " return (self.current.next==None) \n", + " \n", + " def nextLink(self): # go to next link\n", + " self.previous = self.current\n", + " self.current = self.current.next\n", + "\n", + " def getCurrent(self): # get current link\n", + " return self.current \n", + "\n", + " def insertAfter(self,dd): # insert after\n", + " # current link\n", + " newLink = Link(dd)\n", + " if( self.ourList.isEmpty() ):# empty list\n", + " self.ourList.setFirst(newLink)\n", + " self.current = newLink\n", + " else: # not empty\n", + " newLink.next = self.current.next\n", + " self.current.next = newLink\n", + " self.nextLink() # point to new link\n", + "\n", + " def insertBefore(self,dd): # insert before\n", + " # current link\n", + " newLink = Link(dd)\n", + " if(self.previous == None): # beginning of list (or empty list)\n", + " newLink.next = self.ourList.getFirst()\n", + " self.ourList.setFirst(newLink)\n", + " self.reset()\n", + " else: # not beginning\n", + " newLink.next = self.previous.next\n", + " self.previous.next = newLink\n", + " self.current = newLink\n", + "\n", + " def deleteCurrent(self): # delete item at current\n", + " value = self.current.dData\n", + " if(self.previous == None): # beginning of list\n", + " self.ourList.setFirst(self.current.next)\n", + " self.reset()\n", + " else: # not beginning\n", + " self.previous.next = self.current.next\n", + " if( self.atEnd() ):\n", + " self.reset()\n", + " else:\n", + " current = current.next\n", + " return value\n", + "\n", + "theList = LinkList() # new list\n", + "iter1 = theList.getIterator() # new iter\n", + "iter1.insertAfter(20)\n", + "iter1.insertAfter(40)\n", + "iter1.insertAfter(80)\n", + "iter1.insertBefore(60) # insert items\n", + "while(True):\n", + " print 'Enter first letter of show, reset, ' , \n", + " print 'next, get, before, after, delete: ' ,\n", + " choice = raw_input() # get users option\n", + " if choice == 's': # show list\n", + " if( not theList.isEmpty() ):\n", + " theList.displayList()\n", + " else:\n", + " print 'List is empty'\n", + " elif choice == 'r': # reset (to first)\n", + " iter1.reset()\n", + " elif choice == 'n': # advance to next item\n", + " if( not theList.isEmpty() and not iter1.atEnd() ):\n", + " iter1.nextLink()\n", + " else:\n", + " print \"Cant go to next link\"\n", + " elif choice=='g': # get current item\n", + " if( not theList.isEmpty() ):\n", + " value = iter1.getCurrent().dData\n", + " print \"Returned \" , value\n", + " else:\n", + " print \"List is empty\"\n", + " elif choice == 'b': # insert before current\n", + " print \"Enter value to insert: \",\n", + " value = raw_input()\n", + " iter1.insertBefore(value)\n", + " elif choice=='a': # insert after current\n", + " print \"Enter value to insert: \",\n", + " value = raw_input()\n", + " iter1.insertAfter(value)\n", + " elif choice == 'd': # delete current item\n", + " if( not theList.isEmpty() ):\n", + " value = iter1.deleteCurrent()\n", + " print \"Deleted \" , value\n", + " else:\n", + " print \"Cant delete\"\n", + " else:\n", + " print \"Invalid entry\"\n", + " break" + ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "s\n" + "text": [ + "s\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " List (first-->last): 20 40 60 80 \nEnter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " List (first-->last): 20 40 60 80 \n", + "Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "r\n" + "text": [ + "r\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "n\n" + "text": [ + "n\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "n\n" + "text": [ + "n\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "g\n" + "text": [ + "g\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Returned 60\nEnter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Returned 60\n", + "Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "b\n" + "text": [ + "b\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter value to insert: " + "text": [ + " Enter value to insert: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "100\n" + "text": [ + "100\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "a\n" + "text": [ + "a\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter value to insert: " + "text": [ + " Enter value to insert: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "7\n" + "text": [ + "7\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Enter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "s\n" + "text": [ + "s\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " List (first-->last): 20 40 100 7 60 80 \nEnter first letter of show, reset, next, get, before, after, delete: " + "text": [ + " List (first-->last): 20 40 100 7 60 80 \n", + "Enter first letter of show, reset, next, get, before, after, delete: " + ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", - "text": "\n" + "text": [ + "\n" + ] }, { "output_type": "stream", "stream": "stdout", - "text": " Invalid entry\n" + "text": [ + " Invalid entry\n" + ] } ], "prompt_number": 10 @@ -326,7 +1203,7 @@ { "cell_type": "code", "collapsed": false, - "input": "", + "input": [], "language": "python", "metadata": {}, "outputs": [] |