Exemple #1
0
class Stack:
    def __init__(self):

        self.size = 0
        self.storage = LinkedList()

    def __len__(self):

        return self.size

    def push(self, value):

        self.storage.add_to_head(value)
        self.size +=1

    def pop(self):
        
        if self.size <= 0:
            return None

        else:
            val = self.storage.head.get_value()
            self.storage.remove_head()
            self.size -= 1

            return val
Exemple #2
0
class Stack:
    '''
    A stack implemented with a linked list
    '''
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        '''
        Returns the number of elements in the stack
        '''
        return self.size

    def push(self, value):
        '''
        Adds a value to the top of the stack
        '''
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        '''
        removes and returns the element at the top of the stack
        '''
        if self.size == 0:
            return None

        self.size -= 1
        return self.storage.remove_head()
Exemple #3
0
class Stack:
    """Linked list as the underlying storage structure"""
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        #self.size += 1
        #return self.storage.add_to_tail(value)
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        #!= : this mean there is no elements in the list
        # if self.size != 0:
        #     # -= : removing one element at a time.
        #     self.size -= 1
        #     return self.storage.remove_tail()
        if self.size == 0:
            return None
        self.size -= 1
        return self.storage.remove_head()
Exemple #4
0
class Queue:
    def __init__(self):
        self.size = 0
        # self.storage = np.array([])
        self.storage = LinkedList(None)

    def __len__(self):
        return self.size

    def enqueue(self, value):
        # When you form a queue you add to the head
        # self.storage = np.insert(self.storage, 0, value)
        self.storage.add_to_head(value)
        self.size += 1
        return

    def dequeue(self):
        # When you leave the queue you leave from the tail
        if self.size == 0:
            return None
        else:
            # delvalue = self.storage[-1]
            # self.storage = self.storage[:-1]
            # self.size -= 1
            # return delvalue
            tail_value = self.storage.tail.value
            self.storage.remove_tail()
            self.size -= 1
            return tail_value
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def isEmpty(self):
        return self.size == 0

    # len performance: O(1)
    def __len__(self):
        return self.size

    # push performance: O(1)
    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    # pop performance: O(1)
    def pop(self):
        if self.size == 0:
            return None
        else:
            self.size -= 1
            return self.storage.remove_head()


# 3. In terms of the implementation, both Stacks are nearly identical with only the
# method names differing. In terms of performance, the push and pop methods for both
# implementations are O(1). Note that the LinkedList's remove_tail method has a
# performance of O(n). So in order for the LinkedList implementation to acheive a
# performance of O(1), the Stack must be implemented so that 'head' of the LinkedList
# represents the 'top' of the Stack. This is different from the array implementation
# where last index in the array represents the 'top' of the Stack.
Exemple #6
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1
        return self.storage

    def pop(self):
        if self.size == 0:
            return None
        else:
            node = self.storage.remove_head()
            self.size -= 1
        return node


# if __name__ == '__main__':
#     Stack.main()

# stack = Stack()
# print(len(stack))
# print(stack.push(4))
# print(stack.push(5))
# print(stack.push(6))
# print(stack.pop())
# print(len(stack))
Exemple #7
0
class QueueLL:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def enqueue(self, value):
        self.storage.add_to_head(value)

    def dequeue(self):
        self.storage.remove_tail()
class StackLL:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def push(self, value):
        self.storage.add_to_head(value)

    def pop(self):
        if len(self.storage) == 0:
            return None
        self.storage.remove_head()
Exemple #9
0
class LLCoolStack:
    def __init__(self):
        self.storage = LinkedList()

    def __len__(self):
        return self.storage.count

    def push(self, value):
        self.storage.add_to_head(value)

    def pop(self):
        return self.storage.remove_head()
Exemple #10
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.storage.get_length()

    def push(self, value):
        self.storage.add_to_head(value)

    def pop(self):
        return self.storage.remove_head()
Exemple #11
0
class Stack:
    def __init__(self):
        self.__storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.__storage.add_to_head(value)

    def pop(self):
        return self.__storage.remove_head()

    @property
    def size(self) -> int:
        return len(self.__storage)
Exemple #12
0
class Queue:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()
    
    def __len__(self):
        return self.size

    def enqueue(self, value):
        self.storage.add_to_head(value)
        self.size = self.storage.length

    def dequeue(self):
        removed = self.storage.remove_tail()
        self.size = self.storage.length
        return removed
Exemple #13
0
class StackL:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        if self.size == 0:
            return None
        self.size -= 1
        return self.storage.remove_head()
Exemple #14
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        removed = self.storage.remove_head()
        if removed is not None:
            self.size -= 1
        return removed
Exemple #15
0
class Queue:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()
    
    def __len__(self):
        return self.size

    def enqueue(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def dequeue(self):
        removed = self.storage.remove_tail()
        if removed is not None:
            self.size -= 1
        return removed
Exemple #16
0
class Stack:
    """Object-oriented implementation of Stack class with Node and
    LinkedList"""
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        count = 0
        current = self.storage.head
        # loop through to count "heads"
        while current:
            current = current.get_next()
            count += 1
        self.size = count
        return count

    def push(self, value):
        """Adds an item to the top of the stack"""
        self.storage.add_to_head(value)  #O(1)
        count = 0
        current = self.storage.head
        # loop through to count "heads"
        while current:
            current = current.get_next()
            count += 1
        self.size = count

    def pop(self):
        """Removes and returns the element at the top of the stack"""
        # if empty
        if self.size == 0:
            return None
        else:
            top = self.storage.head.get_value()
            self.storage.remove_head()  #O(1)
            return top

        count = 0
        current = self.storage.head
        # loop through to count "heads"
        while current:
            current = current.get_next()
            count += 1
        self.size = count
Exemple #17
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.size += 1
        self.storage.add_to_head(value)

    def pop(self):
        if not self.storage.head:
            self.size ==0
        else:
            self.size -= 1
            return self.storage.remove_head()
Exemple #18
0
class Stack:
    def __init__(self):
        self.size = 0
        self.items = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.size += 1
        self.items.add_to_head(value)

    def pop(self):
        if self.size == 0:
            return None
        else:
            self.size -= 1
            return self.items.remove_head()
Exemple #19
0
class Stack: #LL-based implementation
    # New elements added to head, popped off of head
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size
    
    def push(self, value):
        self.size += 1
        self.storage.add_to_head(value)
    
    def pop(self):
        if self.size == 0: #self.storage.head is None and self.storage.tail is None:
            return None
        else:
            self.size -= 1
            return self.storage.remove_head()
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        current_node = self.storage.head
        length = 0

        while current_node:
            length += 1
            current_node = current_node.next_node
        return length

    def push(self, value):
        self.storage.add_to_head(value)

    def pop(self):
        return self.storage.remove_head()
Exemple #21
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __str__(self):
        return f'{self.size} : {self.storage}'

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        if self.size > 0:
            self.size -= 1
            return self.storage.remove_head()
        return None


# testing_list = Stack()
# print(testing_list, "Empty")
# testing_list.push(100)
# print(testing_list.__len__, "length")
# print(testing_list, "First add")
# testing_list.push(101)
# print(testing_list.__len__, "length")
# print(testing_list, "Second add")
# testing_list.push(105)
# print(testing_list.__len__, "length")
# print(testing_list, "third add")
# testing_list.pop()
# print(testing_list.__len__, "length")
# print(testing_list, "pop 1")
# testing_list.pop()
# print(testing_list.__len__, "length")
# print(testing_list, "pop 2")
# testing_list.pop()
# print(testing_list.__len__, "length")
# print(testing_list, "pop 3")
# print(testing_list, "list")
Exemple #22
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.size += 1
        self.storage.add_to_head(value)

    def pop(self):
        if self.size:
            self.size -= 1
            removed_head_val = self.storage.remove_head()
            return removed_head_val
        else:
            return None
Exemple #23
0
class Queue:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def enqueue(self, value):
        # Increase size by 1
        self.size = self.size + 1
        # Push new value into the back of the queue
        self.storage.add_to_head(value)
        return None

    def dequeue(self):
        # Check for 0 to avoid a negative size
        if self.size > 0:
            self.size = self.size - 1
        return self.storage.remove_tail()
Exemple #24
0
class StackQueue:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size = self.size + 1
        return value

    def pop(self):
        if self.size >= 1:
            val = self.storage.remove_head()
            self.size = self.size - 1
            return val
        else:
            return None
Exemple #25
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    @property
    def isEmpty(self):
        return self.size == 0

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        if self.size:
            self.size -= 1
            return self.storage.remove_head()
Exemple #26
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    def pop(self):
        try:
            val = self.storage.head.value
            self.storage.remove_head()
            self.size -= 1
            return val
        except:
            return None
Exemple #27
0
class Stack:  # In a stack, a new element is added at one end and an element is removed from that end only.
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.size += 1
        self.storage.add_to_head(value)

    def pop(self):
        if self.size > 0:
            self.size -= 1
            return self.storage.remove_head()
        else:
            return None

    def len(self):
        return self.size
Exemple #28
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return self.size

    def push(self, value):
        self.size += 1
        self.storage.add_to_head(value)

    def pop(self):
        if self.size > 0:
            self.size -= 1
            return self.storage.remove_from_head()


# 3.
# The difference between linked lists and array methods are that the array methods are already built in parts of the storage list.
# We can use these instead of writing out our own in a linked list class, and we can reference indeces of the array whereas in linked
# lists we cannot. Additionally when implementing linked lists with stacks, it seems we need to have an additional 'Remove from tail'
# method in order to properly pop() in the way that is expected with a stack.
Exemple #29
0
class Queue:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def __len__(self):
        return len(self.storage)

    def enqueue(self, value):
        return self.storage.add_to_head(value)

    def dequeue(self):
        if len(self.storage) == 0:
            return None
        return self.storage.remove_tail()
Exemple #30
0
class Stack:
    def __init__(self):
        self.size = 0
        self.storage = LinkedList()

    def isEmpty(self):
        return self.size == 0

    # len performance: O(1)
    def __len__(self):
        return self.size

    # push performance: O(1)
    def push(self, value):
        self.storage.add_to_head(value)
        self.size += 1

    # pop performance: O(1)
    def pop(self):
        if self.size == 0:
            return None
        else:
            self.size -= 1
            return self.storage.remove_head()