Example #1
0
class Queue:
    def __init__(self):
        self.__list = LinkedList()
        self.__rear = Node()
        self.__front = Node()
        self.__size = 0

    def size(self):
        return self.__list.size()

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

    def front(self):
        return self.__front

    def enqueue(self, elem):
        e = Node(elem)
        if self.__list.head() != None:
            self.__rear.set_next(e)
        else:
            self.__list.add_head(e)
            self.__front = e
        self.__rear = e

    def dequeue(self):
        if self.__list.head() != None:
            temp = self.__front
            self.__list.remove_head()
            self.__front = self.__front.get_next()
            return temp.get_element()
        else:
            print('Queue is empty, cannot remove element!')
            return 1

    def __repr__(self):
        result = "-> "
        p = self.__list.head()
        print(p)
        if p is not None:
            while p is not None:
                result += "%s " % str(p.get_element())
                p = p.get_next()
        return result
Example #2
0
class stackADT_linkedlist:
    def __init__(self):
        self.storage = LinkedList()
        #counter will be used to get full size of the list
        self.counter = 0

    def stackPUSH(self, item):
        '''adds element to stack - initially named push, renamed to prevent confusion when reading world.py'''
        self.storage.add_head(Node(item))
        #increases total counter by 1
        self.counter += 1

    def pop(self):
        '''removes element from stack'''
        #reduces total counter by 1
        self.counter -= 1
        return self.storage.remove_head()

    def viewStack(self):
        '''easy way to view entire contents of stack'''
        return self.storage

    def size(self):
        return self.counter