国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python數(shù)據(jù)結(jié)構(gòu)中實(shí)現(xiàn)隊(duì)列的幾種方法

這篇具有很好參考價(jià)值的文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)中實(shí)現(xiàn)隊(duì)列的幾種方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.list實(shí)現(xiàn) enqueue append() dequeue pop(0) 或 enqueue insert(0,item) dequeue pop()

MAX_SIZE = 100
class MyQueue1(object):
    """模擬隊(duì)列"""

    def __init__(self):
        self.items = []
        self.size = 0

    def is_empty(self):
        """判斷是否為空"""
        return self.size == 0

    def size(self):
        """返回隊(duì)列的大小"""
        return self.size

    def enqueue(self, item):
        """入隊(duì)(加入元素)"""
        self.items.append(item)
        self.size += 1

    def dequeue(self):
        """出隊(duì)(彈出元素)"""
        if self.size < MAX_SIZE and self.size >= 0:
            self.size -= 1
            return self.items.pop(0)
        else:
            print("隊(duì)列已經(jīng)為空")
            return None

    def getFront(self):
        if not self.is_empty():
            return self.items[0]
        else:
            return None
    
    def getRear(self):
        if not self.is_empty():
            return self.items[self.size-1]
        else:
            return None
    
    def __str__(self):
        return str(self.items)


class MyQueue2(object):
    """模擬隊(duì)列"""
    def __init__(self):
        self.items = []
        self.size = 0

    def is_empty(self):
        """判斷是否為空"""
        return self.size == 0

    def size(self):
        """返回隊(duì)列的大小"""
        if self.size <= MAX_SIZE:
            return self.size

    def enqueue(self, item):
        """入隊(duì)(加入元素)"""
        if self.size <= MAX_SIZE:
            self.items.insert(0, item)
            self.size += 1


    def dequeue(self):
        """出隊(duì)(彈出元素)"""
        if self.size > 0 and self.size <= MAX_SIZE:
            self.size -= 1
            return self.items.pop()
        else:
            print("隊(duì)列已經(jīng)為空")
            return None

    def getFront(self):
        """返回隊(duì)頭元素"""
        if not self.is_empty():
            return self.items[0]
        else:
            return None
    def getRear(self):
        if not self.is_empty():
            return self.items[self.size-1]
        else:
            return None
    
    def __str__(self):
        return str(self.items)

def test(obj):
    i = obj()
    for x in range(0,6):
        i.enqueue(x)
        print(i)
    i.dequeue()
    print(i, i.getFront(), i.getRear(), i.size)

if __name__ == "__main__":
    test(MyQueue1)
    test(MyQueue2)

運(yùn)行結(jié)果:
python數(shù)據(jù)結(jié)構(gòu)中實(shí)現(xiàn)隊(duì)列的幾種方法

2.鏈隊(duì) 前文已介紹

首尾指針實(shí)現(xiàn)
鏈隊(duì) 首尾指針實(shí)現(xiàn)鏈隊(duì)

class Node():
    def __init__(self, value=None):
        self.value = value
        self.next = None

class StcakQueue():
    def __init__(self):
        self.front = Node()
        self.rear = Node()
        self.size = 0

    def enqueue(self, value):
        node = Node(value)
        if self.size == 0:
            self.front = node
            self.rear = node
        else:
            self.rear.next = node
            self.rear = node
        self.size += 1

    def dequeue(self):
        if self.size == 0:
            raise Exception('queue is empty')
        else:
            temp = self.front.value
            self.front = self.front.next
            self.size -= 1
            return temp

    def is_empty(self):
        if self.size == 0 :
            return False
        else:
            return True

    def top(self):
        if self.size == 0 :
            raise LookupError('queue is empty')
        else:
            return self.front.value

    def size(self):
        return self.size

    def __str__(self):
        if self.size == 0:
            return None
        else:
            stack_list = []
            temp, count = self.front, self.size
            while count > 0 :
                stack_list.append(temp.value)
                temp = temp.next
                count -= 1
            return str(stack_list)
       

if __name__ == "__main__":
    i = StcakQueue()
    for x in range(0,6):
        i.enqueue(x)
        print(i)
    i.dequeue()
    print(i, i.size)

尾插有頭結(jié)點(diǎn)實(shí)現(xiàn)鏈隊(duì)
鏈隊(duì) 尾插法 有頭結(jié)點(diǎn)實(shí)現(xiàn)鏈隊(duì)

class Node(): #結(jié)點(diǎn)類(lèi)
    def __init__(self,elem):
        self.elem = elem # 數(shù)據(jù)域,用來(lái)存放數(shù)據(jù)元素
        self.next = None # 指針域,指向下一個(gè)結(jié)點(diǎn)

    def __str__(self):
        return str(self.elem)


class Queue(): # 隊(duì)列
    def __init__(self): # 隊(duì)列初始化
        self.head = None # 構(gòu)造私有頭結(jié)點(diǎn)
    
    def is_empty(self):
        return self.head == None

    def enqueue(self,elem): # 進(jìn)隊(duì)列(正常向后填元素)
        node = Node(elem) # 創(chuàng)建新結(jié)點(diǎn)
        if self.is_empty(): # 如果為空, 新建head結(jié)點(diǎn)
            self.head = Node
            self.head.next = node
            node = self.head
        else:
            current = self.head
            while current.next is not None:
                current = current.next
            current.next = node

    def dequeue(self): # 出隊(duì)列(頭出)
        if not self.is_empty():
            current = self.head.next
            self.head.next = self.head.next.next
            return current.elem
        else:
            raise IndexError('pop from a empty stack')
    
    def size(self):
        current = self.head
        count = 0
        while current.next is not None:
            current = current.next
            count += 1
        return count

    def __repr__(self):
        stack_list = []
        current = self.head
        while current.next is not None:
            stack_list.append(current.next.elem)
            current = current.next
        return str(stack_list)

    __str__ = __repr__


if __name__ == "__main__":
    i = Queue()
    for x in range(0, 6):
        i.enqueue(x)
        print(i)

    i.dequeue()
    print(i, i.size())

3.兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列 O(1)

兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列 list棧文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801808.html

class CQueue:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def append_tail(self, elem):
        self.stack1.append(elem)

    def delete_head(self):
        if not self.stack2:
            if self.stack1:
                while self.stack1:
                    elem = self.stack1.pop()
                    self.stack2.append(elem)
            else:
                raise Exception("Queue is empty.")
            
        elem = self.stack2.pop()
        return elem

#學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流群:711312441
def unitest():
    # Create an instance of class CQueue
    que = CQueue()
    print("Push 1, 2, 3 successively into CQueue.")
    for i in range(1, 4):
        que.append_tail(i)
    print("Pop the head of the queue:", que.delete_head())
    print("Pop the head of the queue:", que.delete_head())
    print("Push 4, 5, 6 successively into CQueue.")
    for i in range(4, 7):
        que.append_tail(i)
    # Pop the rest elements in the queue
    for i in range(4):
        print("Pop the head of the queue:", que.delete_head())
        

if __name__ == '__main__':
    unitest()

到了這里,關(guān)于python數(shù)據(jù)結(jié)構(gòu)中實(shí)現(xiàn)隊(duì)列的幾種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包