class Stack(object): def __init__(self): self.__list = LinkList() def push(self, item): self.__list.push(Node(item)) def pop(self): return self.__list.pop().item_value def peek(self): # add exercise 1.3.7 return self.__list[0].item_value def is_empty(self): return len(self.__list) == 0 def size(self): return len(self.__list) def __iter__(self): self.__data_list.__iter__() return self def __next__(self): return self.__data_list.__next__()
class Deque(object): def __init__(self): self.__link_list = LinkList() def is_empty(self): return len(self.__link_list) == 0 def size(self): return len(self.__link_list) def push_left(self, item): self.__link_list.push(Node(item)) def push_right(self, item): self.__link_list.append(Node(item)) def pop_left(self): return self.__link_list.pop().item_value def pop_right(self): result = self.__link_list[self.size() - 1] self.__link_list.remove(self.size() - 1) return result.item_value