1. 程式人生 > >棧與雙端佇列

棧與雙端佇列

ps:棧的本質是列表,雙端佇列的本質也是列表 下圖是基礎程式碼及驗證例項: 1、棧

class Stack(object):
    '''棧'''
    def __init__(self):
        self.__items=[]

    def is_empty(self):
        '''判斷是否為空'''
        return self.__items == []
    def push(self,items):
        '''往尾部加入元素'''
        self.__items.append(items)
    def peek(self):
        '''棧頂元素保持不變,只是檢視'''
        if self.__items:
            return self.__items[-1]
        else:
            return []

    def pop(self):
        '''出棧'''
        return self.__items.pop()
    def is_empty(self):
        '''判斷是否為空'''
        return not self.__items

    def size(self):
        '''返回的個數'''
        return len(self.__items)

if __name__=='__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())

2、雙端佇列:

class Deque(object):
    def __init__(self):
        '''定義雙端佇列的列表'''
        self.__list = []
    def add_front(self,item):
        '''從頭部增加元素'''
        self.__list.insert(0,item)
    def add_rear(self,item):
        '''從尾部增加元素'''
        self.__list.append(item)

    def pop_front(self):
        '''從佇列頭部刪除元素'''
        return self.__list.pop(0)
    def pop_rear(self):
        '''從尾部刪除元素'''
        return self.__list.pop()

    def is_empty(self):
        '''判斷是否為空列表'''
        return self.__list == []
    def size(self):
        '''返回佇列的大小'''
        return len(self.__list)


if __name__=="__main__":
    s = Deque()
    s.add_front(1)
    s.add_front(2)
    s.add_front(3)
    s.add_front(4)
    print(s.pop_rear())
    print(s.pop_rear())
    print(s.pop_rear())
    print(s.pop_rear())