__王溪之__
头号学霸No.1
2粉丝2关注

没什么才艺,给大家看看我写的stack和queue吧。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

没错,又是我,那个写代码自带字体颜色的头号学霸No.1。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# stack
class stack:
    '''
an iterable-type that doesn't support index
first in last out
    '''

    # create a new stack
    def __init__(self, *items):
        self.__item = list(items)
        self.top = len(self.__item)-1
        self.pointer = self.top

    # display the stack
    def __repr__(self):
        if self.top >= 0:
            if self.pointer > 0:
                self.pointer -= 1
                return f"{self.__item[self.pointer]}"
            else:
                self.pointer = self.top
                return f"{self.__item[self.pointer]}"
        return 'None'

    # add with another stack
    def __add__(self, AnotherStack):
        return self.__item + AnotherStack.__item

    # push items into the stack
    def push(self, *item):
        if None in item:
            raise TypeError('can\'t push None into a stack')
        for s in item:
            self.__item += [s]
            self.top += 1
        return self

    # delete the last item
    def pop(self, thingsnum):
        if self.top+1 >= thingsnum:
            self.__item = self.__item[self.top+1-thingsnum:]
            self.pointer -= thingsnum
            return self
        raise IndexError('stack index out of range')

# queue
class queue:
    '''
an iterable-type that doesn't support index
first in first out
    '''

    # create a new queue
    def __init__(self, *items):
        self.__item = list(items)
        self.front = 0
        self.last = -1
        self.pointer = -1

    # display the queue
    def __repr__(self):
        if self.last >= 0:
            if self.pointer < self.last:
                self.pointer += 1
                return f"{self.__item[self.pointer]}"
            else:
                self.pointer = 0
                return f"{self.__item[self.pointer]}"
        else:
            return 'None'

    # add with another queue
    def add(self, AnotherQueue):
        return self.__item + AnotherQueue.__item

    # push items into the queue
    def push(self, *things):
        if None in things:
            raise TypeError('can\'t push None-type items into a queue')
        for s in things:
            self.__item.append(s)
        self.last += len(things)
        return self.__item

    # delete the last item in the queue
    def pop(self, thingsnum):
        if self.last+1 >= thingsnum >= 0:
            self.__item[0:thingsnum] = []
            self.last -= thingsnum
            self.pointer = 0
            return self
        raise IndexError('queue index out of range')

(可能会有一点点bug,后期会修复的)