Advertisement
Guest User

Untitled

a guest
Feb 26th, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.38 KB | None | 0 0
  1. """
  2. -------------------------------------------------------
  3. [function library file name]
  4. [description of functions]
  5. -------------------------------------------------------
  6. Author: Matthew Fung
  7. ID: 140422730
  8. Email: fung2730@mylaurier.ca
  9. Version: 2015-02-19
  10. -------------------------------------------------------
  11. """
  12. import copy
  13.  
  14.  
  15. class _DequeNode:
  16.  
  17. def __init__(self, value, previous_node, next_node):
  18. """
  19. -------------------------------------------------------
  20. Initializes a deque node.
  21. Use: node = _DequeNode(value, next_node)
  22. -------------------------------------------------------
  23. Preconditions:
  24. _value - data value for node
  25. _next - next node
  26. _previous - previous node
  27. Postconditions:
  28. Initializes a deque node that contains a copy of value, a link to the previous node
  29. and a link to the next node in the deque.
  30. -------------------------------------------------------
  31. """
  32. self._value = copy.deepcopy(value)
  33. self._previous = previous_node
  34. self._next = next_node
  35. return
  36.  
  37. class Deque:
  38.  
  39. def __init__( self ):
  40. """
  41. -------------------------------------------------------
  42. Initializes an empty Deque. Data is stored in a linked list.
  43. Use: q = Deque()
  44. -------------------------------------------------------
  45. Postconditions:
  46. Initializes an empty Deque.
  47. -------------------------------------------------------
  48. """
  49. self._front = None
  50. self._rear = None
  51. self._size = 0
  52. return
  53.  
  54. def __len__(self):
  55. """
  56. -------------------------------------------------------
  57. Returns the size of the Deque.
  58. Use: n = len( q )
  59. -------------------------------------------------------
  60. Postconditions:
  61. Returns the number of values in the deque.
  62. -------------------------------------------------------
  63. """
  64. return self._size
  65.  
  66. def is_empty(self):
  67. """
  68. -------------------------------------------------------
  69. Determines if the deque is empty.
  70. Use: b = q.is_empty()
  71. -------------------------------------------------------
  72. Postconditions:
  73. Returns True if the deque is empty, False otherwise.
  74. -------------------------------------------------------
  75. """
  76. return self._size == 0
  77.  
  78. def insert_front( self, value ):
  79. """
  80. -------------------------------------------------------
  81. Inserts a copy of value into the front of the deque.
  82. Use: q.insert_front( value )
  83. -------------------------------------------------------
  84. Preconditions:
  85. value - a data element
  86. Postconditions:
  87. value is added to the front of the deque.
  88. -------------------------------------------------------
  89. """
  90. node = _DequeNode(value, self._rear, self._front)
  91. self._front = node
  92. self._size += 1
  93. return
  94.  
  95. def insert_rear( self, value ):
  96. """
  97. -------------------------------------------------------
  98. Inserts a copy of value into the rear of the deque.
  99. Use: q.insert_rear( value )
  100. -------------------------------------------------------
  101. Preconditions:
  102. value - a data element
  103. Postconditions:
  104. value is added to the rear of the deque.
  105. -------------------------------------------------------
  106. """
  107. node = _DequeNode(value, self._front, self._rear)
  108. self._rear = node
  109. self._size += 1
  110. return
  111.  
  112. def remove_front( self ):
  113. """
  114. -------------------------------------------------------
  115. Removes the front of the deque.
  116. -------------------------------------------------------
  117. Postconditions:
  118. Returns the value at the front of deque - the value is
  119. removed from queue. Returns None if deque is empty.
  120. -------------------------------------------------------
  121. """
  122.  
  123. if self._front is None:
  124. value=None
  125. else:
  126. value=self._front._value
  127. self._front=self._front._next
  128.  
  129. self._size -= 1
  130.  
  131. return value
  132.  
  133. def remove_rear( self ):
  134. """
  135. -------------------------------------------------------
  136. Removes the rear of the deque.
  137. -------------------------------------------------------
  138. Postconditions:
  139. Returns the value at the rear of deque - the value is
  140. removed from deque. Returns None if deque is empty.
  141. -------------------------------------------------------
  142. """
  143.  
  144. if self._rear is None:
  145. value=None
  146. else:
  147. value=self._front._value
  148. self._rear=self._rear._previous
  149.  
  150. self._size -= 1
  151.  
  152. return value
  153.  
  154. def peek_front( self ):
  155. """
  156. -------------------------------------------------------
  157. Peeks at the front of deque.
  158. Use: v = q.peek_front()
  159. -------------------------------------------------------
  160. Postconditions:
  161. Returns a copy of the value at the front of deque -
  162. the value is not removed from deque. Returns None
  163. if deque is empty.
  164. -------------------------------------------------------
  165. """
  166. if self._size == 0:
  167. value = None
  168. else:
  169. value = copy.deepcopy(self._front._value)
  170. return value
  171.  
  172. def peek_rear( self ):
  173. """
  174. -------------------------------------------------------
  175. Peeks at the rear of deque.
  176. Use: v = q.peek_rear()
  177. -------------------------------------------------------
  178. Postconditions:
  179. Returns a copy of the value at the rear of deque -
  180. the value is not removed from deque. Returns None
  181. if deque is empty.
  182. -------------------------------------------------------
  183. """
  184. if self._size == 0:
  185. value = None
  186. else:
  187. value = copy.deepcopy(self._rear._value)
  188. return value
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement