class ArrayQueue(QueueInterface):
    def __init__(self, capacity=0):
        # 动态数组对象, 容量默认为10,有10个空间的顺序队列,
        # 用户可自定义队列的大小
        self.__data = Array(capacity)

    # 获取队列内元素个数
    def getSize(self):
        return self.__data.getSize()

    # 判断队列是否为空
    def isEmpty(self):
        return self.__data.isEmpty()

    # 入队
    def enqueue(self, e):
        self.__data.addLast(e)

    #出队
    def dequeue(self):
        return self.__data.deleteFirst()

    # 取队首元素
    def getFront(self):
        return self.__data.getFirst()

    def __str__(self):
        return "ArrayQueue: {}".format(self.__data)

    def __repr__(self):
        return self.__str__()
class ArrayStack(StackInterface):
    def __init__(self, capacity=0):
        # 动态数组对象, 容量默认为10,有10个空间的顺序栈,
        # 用户可自定义栈的大小
        self.__data = Array(capacity)
        # self.__size = 0  不需要维护size,下面用不到

    # 获取栈内元素个数
    def getSize(self):
        return self.__data.getSize()

    # 判断栈是否为空
    def isEmpty(self):
        return self.__data.isEmpty()

    # 入栈
    def push(self, e):
        self.__data.addLast(e)

    # 出栈
    def pop(self):
        return self.__data.deleteLast()

    # 取栈顶元素
    def peek(self):
        return self.__data.getLast()

    def __str__(self):
        return "ArrayStack:{}, size = {}".format(self.__data,
                                                 self.__data.getSize())

    def __repr__(self):
        return self.__str__()
def generate_random_array(n, range_L, range_R):
    random.seed(time())
    array = Array()
    for i in range(0, n, 1):
        array.addLast(randint(range_L, range_R))
    return array