1. 程式人生 > >python 資料結構之佇列和棧

python 資料結構之佇列和棧

# 棧是一種特殊的線性表,僅能線上性表的一端操作,棧頂允許操作,棧底不允許操作。
# 棧的特性:後進先出
class Stack(object):
    """棧"""
    def __init__(self):
        self.items=[]
    def is_empty(self):
        """判斷是否為空"""
        return self.items==[]
    def push(self,item):
        '''加入元素'''
        self.items.append(item)
    def pop(self):
        '''彈出元素'''
        return self.items.pop()
    def peek(self):
        """返回棧頂元素"""
        return self.items[len(self.items)-1]
    def size(self):
        '''返回棧的大小'''
        return len(self.items)



#同棧一樣,佇列也可以用順序表或者連結串列實現, 佇列是一種可以實現“先進先出”的儲存結構。
class Queue():
    '''佇列'''
    def __init__(self):
        self.items=[]
    def enqueue(self,item):
        """往佇列中加入一個item"""
        self.items.insert(0,item)
    def queue_pop(self):
        '''從佇列頭部刪除一個元素'''
        return self.items.pop()
    def is_empty(self):
        '''判斷佇列是否為空'''
        return self.items==[]
    def size(self):
        return len(self.items)

#雙端佇列:是一種具有佇列和棧的性質的資料結構。
# 雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。
class DoubleQueue(object):
    '''雙端佇列'''
    def __init__(self):
        '''建立一個空的雙端佇列'''
        self.items=[]
    def add_font(self,item):
        '''從隊頭加入一個item元素'''
        self.items.insert(0,item)
    def add_rear(self,item):
        '''從尾部新增元素'''
        self.items.append(item)
    def remove_font(self,item):
        '''從隊頭刪除一個元素'''
        return  self.items.pop(0)
    def remove_rear(self):
        '''從尾部刪除一個元素'''
        return self.items.pop()
    def is_empty(self):
        '''判斷佇列是否為空'''
        return self.items==[]
    def size(self):
        '''判斷佇列的大小'''
        return len(self.items)