Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Whit - Paper #36

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 146 additions & 7 deletions stacks_queues/queue.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

INITIAL_QUEUE_SIZE = 20
RESIZE_INCREMENT = 5

class QueueFullException(Exception):
pass
Expand All @@ -13,8 +14,9 @@ def __init__(self):
self.store = [None] * INITIAL_QUEUE_SIZE
self.buffer_size = INITIAL_QUEUE_SIZE
self.front = -1
self.rear = -1
self.back = -1
self.size = 0
self.resize_increment = RESIZE_INCREMENT


def enqueue(self, element):
Expand All @@ -23,39 +25,176 @@ def enqueue(self, element):
In the store are occupied
returns None
"""
pass
if self.size == self.buffer_size:
self.__enlarge_capacity(self.resize_increment)

if self.front == -1:
self.front = 0
self.back = 0

self.store[self.back] = element
self.back = (self.back + 1) % len(self.store)
self.size += 1
Comment on lines +28 to +37

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Love the __enlarge_capacity function



def dequeue(self):
""" Removes and returns an element from the Queue
Raises a QueueEmptyException if
The Queue is empty.
"""
pass
if self.empty():
raise QueueEmptyException

element = self.store[self.front]
self.front = (self.front + 1) % len(self.store)
self.size -= 1

return element
Comment on lines +45 to +52

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍



def front(self):
""" Returns an element from the front
of the Queue and None if the Queue
is empty. Does not remove anything.
"""
pass
if self.empty():
return None

return self.store[self.front]


def size(self):
""" Returns the number of elements in
The Queue
"""
pass
return self.size

def empty(self):
""" Returns True if the Queue is empty
And False otherwise.
"""
pass
return self.size == 0

def __str__(self):
""" Returns the Queue in String form like:
[3, 4, 7]
Starting with the front of the Queue and
ending with the rear of the Queue.
"""
pass
return str(self.__get_queue())

def __enlarge_capacity(self, i):
queue = self.__get_queue()

self.store = queue + ([None] * i)
self.buffer_size += i
self.front = 0
self.back = len(queue)

def __get_queue(self):
queue = []
if self.front < self.back:
for i in range(self.front, (self.back) % len(self.store)):
queue.append(self.store[i])

if self.back <= self.front:
for i in range(self.front, len(self.store)):
queue.append(self.store[i])
for j in range(self.back):
queue.append(self.store[j])

return queue



# INITIAL_QUEUE_SIZE = 20

# class QueueFullException(Exception):
# pass

# class QueueEmptyException(Exception):
# pass

# class Queue:

# def __init__(self):
# self.store = [None] * INITIAL_QUEUE_SIZE
# self.buffer_size = INITIAL_QUEUE_SIZE
# self.front = -1
# self.back = -1
# self.size = 0


# def enqueue(self, element):
# """ Adds an element to the Queue
# Raises a QueueFullException if all elements
# In the store are occupied
# returns None
# """
# if self.size == self.buffer_size:
# raise QueueFullException

# if self.front == -1:
# self.front = 0
# self.back = 0

# self.store[self.back] = element
# self.back = (self.back + 1) % len(self.store)
# self.size += 1


# def dequeue(self):
# """ Removes and returns an element from the Queue
# Raises a QueueEmptyException if
# The Queue is empty.
# """
# if self.empty():
# raise QueueEmptyException

# element = self.store[self.front]
# self.front = (self.front + 1) % len(self.store)
# self.size -= 1

# return element


# def front(self):
# """ Returns an element from the front
# of the Queue and None if the Queue
# is empty. Does not remove anything.
# """
# if self.empty():
# return None

# return self.store[self.front]


# def size(self):
# """ Returns the number of elements in
# The Queue
# """
# return self.size

# def empty(self):
# """ Returns True if the Queue is empty
# And False otherwise.
# """
# return self.size == 0

# def __str__(self):
# """ Returns the Queue in String form like:
# [3, 4, 7]
# Starting with the front of the Queue and
# ending with the rear of the Queue.
# """
# queue = []
# if self.front < self.back:
# for i in range(self.front, (self.back) % len(self.store)):
# queue.append(self.store[i])

# if self.back <= self.front:
# for i in range(self.front, len(self.store)):
# queue.append(self.store[i])
# for j in range(self.back):
# queue.append(self.store[j])
# return str(queue)
20 changes: 15 additions & 5 deletions stacks_queues/stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,37 @@ def push(self, element):
""" Adds an element to the top of the Stack.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Stack looks good!

Returns None
"""
pass
self.store.add_first(element)

def pop(self):
""" Removes an element from the top
Of the Stack
Raises a StackEmptyException if
The Stack is empty.
returns None
returns removed element
"""
pass
if self.store.empty():
raise StackEmptyException

return self.store.remove_first()

def empty(self):
""" Returns True if the Stack is empty
And False otherwise
"""
pass
return not self.store.head

def __str__(self):
""" Returns the Stack in String form like:
[3, 4, 7]
Starting with the top of the Stack and
ending with the bottom of the Stack.
"""
pass
values = []

current = self.store.head
while current:
values.append(str(current.value))
current = current.next

return ", ".join(values)
Comment on lines +41 to +48

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

6 changes: 4 additions & 2 deletions tests/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,7 @@ def test_with_large_queue(queue):

assert str(queue) == "[30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220]"

with pytest.raises(QueueFullException):
queue.enqueue('This will break it')
for num in [230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350]:
queue.enqueue(num)

assert str(queue) == "[30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350]"