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

數(shù)據(jù)結(jié)構(gòu)與算法之Python實現(xiàn)——隊列

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法之Python實現(xiàn)——隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在上一期博客中我們學(xué)習(xí)了棧這種結(jié)構(gòu),本期博客將學(xué)習(xí)一下跟棧很類似的一種結(jié)構(gòu)——隊列。

本期知識點:

  1. 順序隊列
  2. 循環(huán)隊列
  3. 鏈?zhǔn)疥犃?/li>
  4. 隊列的應(yīng)用

?? 順序隊列

??什么是隊列?
隊列是一種跟棧很相似的結(jié)構(gòu)。我們知道棧是一種先進(jìn)后出的結(jié)構(gòu),那么隊列就像一個排隊的隊伍一樣,排在前面的買到東西后就離開,然后下一個繼續(xù)買,而后來的人只能按照規(guī)矩排到他們的后面,也就是說隊列是一種先進(jìn)先出的結(jié)構(gòu)。

?? 什么是順序隊列?
在順序棧中,我們用到了兩個指針“base”和“top”來表示棧底和棧頂元素的下一個位置,在隊列中呢我們也用兩個指針“front”和“rear”來分別表示隊頭元素和隊尾元素的下一個位置。看下圖理解:
python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法
python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法
從上圖可以看到順序隊列的特性:

  • 隊空開始入隊時隊頭隊尾指針指向同一處
  • 入隊時是隊尾指針在移動,類似于順序棧的top指針
  • 出隊時是隊頭指針在移動
  • 在出隊中,若隊頭隊尾指針相遇了,則表明隊空了

同時,它也有一個很明顯的缺點:在出隊的操作中,當(dāng)4出隊后,隊尾隊頭指針都已經(jīng)指向了這個順序隊列的末端,這時如果我們再進(jìn)行入隊的話肯定會發(fā)生隊尾指針的溢出。

但實際上,這個隊列此時明顯是空的。所以,如果我們照著前面那樣來設(shè)計順序隊列的結(jié)構(gòu)的話肯定會造成很大的存儲空間的浪費。對于這個缺點,我們可以在每次出隊后,將隊列中的元素往前移一位,也就是出隊是保持隊頭指針不動,隊尾指針再次移動。

但這樣設(shè)計的話操作又太過于繁瑣,于是,為了彌補(bǔ)順序隊列的不足,我們引入循環(huán)隊列。

?? 循環(huán)隊列

??思想實現(xiàn)

首先,我們需要明確設(shè)計循環(huán)隊列的目的:為了解決順序隊列元素完全出隊后,隊頭隊尾指針指向隊列的末尾而無法再入隊的問題。

那么下面以循環(huán)隊列接著處理上面遺留的問題,假如經(jīng)出隊后,此時隊頭隊尾指針指向了隊列的末尾。

因為是個循環(huán)隊列,所以我們此時再入隊,隊尾指針應(yīng)該繼續(xù)移動,然而隊尾后面已經(jīng)沒有存儲空間了,所以它應(yīng)該指向有空間的地方。那么我們就可以使它指向隊列的“頭部”(這里頭部是相對的頭部,本質(zhì)上來說是沒有頭部的,因為它是一個循環(huán)隊列)。

此時,原本的隊頭指針在尾部,原本的隊尾指針現(xiàn)在出現(xiàn)在了頭部。那么這種情況是不是又回到了一個空的順序隊列呢?

我們要實現(xiàn)的就是使尾部的指針加1后能夠跳到頭部去。實現(xiàn)代碼如下:

rear = (rear + 1) % length # length是隊列的長度

結(jié)合下圖來理解這行代碼的意思:
python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法

??初始化

這里我們創(chuàng)建一個關(guān)于隊列的類,所有的操作都通過這個類實例化出的對象調(diào)用相關(guān)的函數(shù)實現(xiàn)。首先是初始化:

class Queue:
    def __init__(self,length):
        self.length = length                # 隊列的長度
        self.elem = [None] * self.length    # 隊列存放的元素
        self.rear = 0                       # 隊尾指針
        self.front = 0                      # 對頭指針

在進(jìn)行其他的操作之前我們要考慮這樣一個問題,在上面所描述的循環(huán)隊列中,初始的空隊列,隊頭隊尾指針是相等的,當(dāng)持續(xù)入隊直至隊滿時,隊頭隊尾指針又是相等的。那么此時這個隊列到底是空的還是滿的呢?為了后續(xù)的操作,我們需要先解決這個問題。

一個初始化的隊列隊頭隊尾指針相等是母庸置疑的,于是我們就以隊頭隊尾指針相等時表示隊空。那么如何來表示隊滿呢?我們可以在隊列的尾部多設(shè)一個空間,當(dāng)將元素入隊至隊滿,隊尾指針就會指向這個另設(shè)的空間,當(dāng)隊滿時隊尾指針再加1就到了隊列頭部與隊頭指針相等,此時就可以以這個條件表示隊滿。

如下圖(紅色格子表示額外使用的空間):python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法
這個問題解決后,我們就繼續(xù)實現(xiàn)隊列的相關(guān)操作。

??求隊列長度

注意:在循環(huán)隊列中隊列的長度不能用隊尾指針與隊頭指針的差值來表示,因為是一個循環(huán)隊列,隊尾指針可能會出現(xiàn)在隊頭指針的“前面”(相對而言)。

	# 獲取隊列長度
    def get_length(self):
        count = 0           # 計數(shù)器,統(tǒng)計隊列中元素的個數(shù)
        m = self.front		# 為了不影響原本的指針,這里用m,n兩個變量來代替它們進(jìn)行遍歷
        n = self.rear
        while m != n:       # 當(dāng)隊頭隊尾指針不相等時作為循環(huán)執(zhí)行的條件
            count += 1      # 計數(shù)
            m = (m + 1) % self.length   # 隊頭指針向隊尾指針移動
        return count

??入隊

入隊前需要考慮隊列是否已滿,滿了就不能入隊了。判斷條件也就是我們在前面說的那樣,當(dāng)隊尾指針在循環(huán)意義上加1等于隊頭指針時,就表示隊列已滿。

若隊列未滿,則將元素入隊,而后隊尾指針加1

    # 入隊
    def queue_in(self,data):
        if (self.rear + 1) % self.length == self.front:         # 入隊時需考慮隊列是否已滿
            print('The queue if full!')
            return
        self.elem[self.rear] = data         # 元素入隊
        self.rear = (self.rear + 1) % self.length       # 隊尾指針移動

??出隊

與入隊相反,出隊則需要判斷隊列是否為空。我們在前面也說到過,當(dāng)隊頭隊尾指針相同時就表示隊空。此時我們將隊頭指針向后移動一位即可。因為出隊是將隊頭元素取出,而隊頭指針始終是指向隊頭的,出隊就是要讓隊頭的后一個元素成為隊頭就行了。

    # 出隊
    def queue_out(self):
        if self.rear == self.front:     # 判斷隊列是否為空
            raise Exception('The Queue is empty!!!')
        self.front = (self.front + 1) % self.length # 出隊就是往后移動隊頭指針

??打印隊列中的元素

在打印隊列中的元素的時候,一定是m也就是隊頭指針在移動,而隊尾指針?biāo)谔幰欢ㄊ强盏?,所以?dāng)隊頭隊尾指針相同時,就表示隊列中的元素已打印完成。

    # 打印隊列中的元素
    def queue_print(self):
        m = self.front                  # 用m來代替隊頭指針移動
        n = self.rear                   # 用n來代替隊尾指針移動
        while m != n:    # 循環(huán)執(zhí)行的條件
            print(self.elem[m],end=" ") # 繼續(xù)打印隊頭元素
            m = (m + 1) % self.length  # 隊頭指針向后移動

??驗證循環(huán)隊列的操作

# 輸入數(shù)據(jù),這里以整型數(shù)字作為例子
a = list(map(int,input('Please input a series of datas:').split(" ")))

# 實例化Queue對象,為了方便表示隊空隊滿,我們另設(shè)一個額外的空間
queue = Queue(len(a) + 1)

# 入隊
for i in range(len(a)):
    queue.queue_in(a[i])

# 打印此時隊列中的元素
queue.queue_print()
# 此時隊列的長度
print('The length of the queue is: ',queue.get_length())
# 此時隊頭隊尾指針的值
print('front: %d,rear: %d' % (queue.front,queue.rear))
# 打印此時隊尾指針指向的元素
print('The element which the rear pointer points to is:',queue.elem[queue.rear])

print('------------------------------------------------')

# 依次將隊列中的元素出隊,每出隊一個元素就打印隊列中的元素和隊頭隊尾指針的值
for i in range(queue.get_length()):
    # 出隊一個元素
    queue.queue_out()
    # 打印出隊一個元素后隊列中剩余的元素
    queue.queue_print()
    print('front: %d,rear: %d' % (queue.front,queue.rear))

print('------------------------------------------------')

# 繼續(xù)入隊,因為我們已經(jīng)設(shè)置好循環(huán)隊列的大小了,所以這里就仍然用5個元素進(jìn)行入隊
b = [6,7,8,9,10]
for i in range(len(b)):
    queue.queue_in(b[i])
    queue.queue_print()
    print('front: %d,rear: %d' % (queue.front,queue.rear))

運行結(jié)果如下:
python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法
若此時再入隊一個元素:

queue.queue_in(11)

python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法
就會看到我們手動設(shè)置的報錯提示:隊列已滿。

?? 鏈?zhǔn)疥犃?/h2>

鏈隊同鏈棧是一個道理,相當(dāng)于是將順序隊列的中的每個元素分割成一個一個的個體,再用某種方式將這些個體連接起來,而指針仍然是獨立于鏈隊之外。

??初始化

因為說到指針是獨立于鏈隊之外的,所以我們?yōu)楣?jié)點單獨設(shè)一個類。在這里我們初始化鏈隊需要將隊頭隊尾指針指向一個空節(jié)點,這個空節(jié)點并無任何用處,僅僅只是為了初始化及后續(xù)操作而已。

同樣,大家也可以考慮一個問題:可不可以直接將兩個指針置為“None”呢?(這樣設(shè)置不方便后續(xù)的入隊出隊操作)。

下面話也不多說,直接看。

# 節(jié)點
class QNode:
    def __init__(self,data):
        self.elem = data
        self.next = None
# 鏈隊
class Queue:
    def __init__(self):
        # 隊頭隊尾指針初始化指向空節(jié)點
        self.front = self.rear = QNode(None)

??入隊

入隊的操作其實很簡單,也是移動隊尾指針即可,但是不需要考慮隊列是否滿的問題,因為是隊列是通過生成節(jié)點動態(tài)增加的。

    # 入隊
    # 入隊是隊尾指針移動,隊尾指針始終指向鏈隊中的最后一個元素
    def Queue_in(self,data):
        # 生成一個新節(jié)點
        node = QNode(data)
        # 隊尾指針?biāo)诠?jié)點指向新生成的節(jié)點
        self.rear.next = node
        # 隊尾指針指向新生成的節(jié)點
        self.rear = node

??出隊

出隊操作就比較復(fù)雜。在出隊時我們還是需要判斷隊列是否為空,這里還是隊頭隊尾指針相同時就表示隊空。

同時還要考慮一個問題,當(dāng)鏈隊中剩余最后一個元素時,若要繼續(xù)出隊,按照上面隊空的概念,此時應(yīng)該是隊頭隊尾指針相同,同時指向最后一個元素,但是按照更上面的說法,隊尾指針始終指向的是鏈隊中的最后一個元素,這樣就矛盾了。

那么我們該如何去處理呢?這時只需要單獨地操作一下即可:當(dāng)要將最后一個元素出隊時,我們直接將那個節(jié)點變成空節(jié)點即可,這里又回到了鏈隊初始化的時候了。

    # 出隊
    # 出隊是隊頭指針進(jìn)行移動,隊頭指針始終指向第一個節(jié)點(空節(jié)點)
    # 隊頭指針移動到下一個節(jié)點,相對而言下一個節(jié)點也就成了“空節(jié)點”
    def Queue_out(self):
        # 判斷鏈隊是否為空,若隊頭隊尾指針相同就表示鏈隊是空的
        if self.front == self.rear:
            raise Exception('The Queue is empty!!!')
        # 若將要出隊的元素是最后一個元素,那么此時直接將隊尾指針?biāo)腹?jié)點變成空節(jié)點即可
        if self.rear.next == None:
            self.rear = QNode(None)
        # 用cur表示隊頭指針指向節(jié)點的上一個節(jié)點,后面需要將其釋放掉
        cur = self.front
        self.front = self.front.next
        # 釋放cur所占用的內(nèi)存
        del cur

??獲取鏈隊的長度

    def get_length(self):
        # 用cur來代替指針進(jìn)行遍歷,此時cur指向隊列中第一個元素(第一個元素也可以為空)
        cur = self.front.next
        # 計數(shù)器
        count = 0
        while cur is not None:
            count += 1
            cur = cur.next
        return count

??打印鏈隊中的元素

    # 打印隊列中的元素
    def Queue_print(self):
        cur = self.front.next
        while cur is not None:
            print(cur.elem,end=" ")
            cur = cur.next

??驗證鏈隊的操作

a = list(map(int,input('Please input a series of datas:').split(" ")))
print(a)
# 實例化Queue對象
queue = Queue()

# 入隊
for i in range(len(a)):
    queue.Queue_in(a[i])

# 打印此時隊列中的元素
queue.Queue_print()
print("\n")

# 依次出隊,每出隊一個元素就打印依次隊列中的元素
while queue.front.next != None:
    queue.front = queue.front.next
    queue.Queue_print()
    print('The length of the Queue is:',queue.get_length())
    print("\n")

if queue.front.next == None and queue.rear.next == None:
    print('yes')

執(zhí)行結(jié)果如下:
python隊列,python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法筆記,python,數(shù)據(jù)結(jié)構(gòu),算法

?? 總結(jié)

隊列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。有順序隊列、循環(huán)隊列、鏈隊三種形式。

順序隊列結(jié)構(gòu)簡單,但是存儲空間有限,且不利于對存儲空間的利用,入隊后出隊都需要重新移動指針。

循環(huán)隊列其實也是順序隊列,不過就是增強(qiáng)了對存儲空間的利用,入隊后出隊不用重新移動指針。

鏈?zhǔn)疥犃芯褪遣挥萌藶榉峙淇臻g,是自動增長的。讀者們可以考慮考慮循環(huán)的鏈?zhǔn)疥犃腥绾螌崿F(xiàn)?

這期博客就到這里啦~下次再見文章來源地址http://www.zghlxwxcb.cn/news/detail-735397.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法之Python實現(xiàn)——隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】python實現(xiàn)二分查找

    【數(shù)據(jù)結(jié)構(gòu)與算法】python實現(xiàn)二分查找

    二分查找 又稱折半查找,它是一種效率較高的查找方法 原理:首先,假設(shè)表中元素是按升序排列,將表中間位置記錄的與查找比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的大于查找,則

    2024年02月05日
    瀏覽(32)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】隊列的實現(xiàn)詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】隊列的實現(xiàn)詳解

    隊列的概念: 隊列:只允許在一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進(jìn)先出FIFO(First In First Out) 新添加的元素添加到隊尾,只能從隊頭取出元素。 入隊列:進(jìn)行插入操作的一端稱為隊尾 出隊列:進(jìn)行刪除操作的一端稱為隊頭 隊列特征如

    2024年04月13日
    瀏覽(35)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】用隊列實現(xiàn)棧

    【數(shù)據(jù)結(jié)構(gòu)與算法】用隊列實現(xiàn)棧

    ??????? 個人主頁:簡 料 ???? 所屬專欄:C++ ???? 個人社區(qū):越努力越幸運社區(qū) ???? 簡? ? ?? 介: 簡料簡料,簡單有料~在校大學(xué)生一枚,專注C/C++/GO的干貨分享,立志成為您的好幫手 ~ C/C++學(xué)習(xí)路線 (點擊解鎖) ?? C語言階段(已結(jié)束) ?? 數(shù)據(jù)結(jié)構(gòu)與算法(ing) ?

    2024年01月15日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】7、隊列(Queue)的實現(xiàn)【用棧實現(xiàn)隊列】

    【數(shù)據(jù)結(jié)構(gòu)與算法】7、隊列(Queue)的實現(xiàn)【用棧實現(xiàn)隊列】

    ?? 隊列 (Queue)是一種特殊的 線性表 , 只能在頭尾兩端進(jìn)行操作 ?? 隊尾(rear):只能從 隊尾添加 元素,一般叫做 enQueue , 入隊 ?? 隊頭(front):只能從 隊頭移除 元素,一般叫做 deQueue , 出隊 ?? 先進(jìn)先出 的原則, F irst I n F irst O ut, FIFO ?? 隊列內(nèi)部的實現(xiàn)可

    2024年02月12日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】---棧和隊列的互相實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)和算法】---棧和隊列的互相實現(xiàn)

    具體題目可以參考 LeetCode 232. 用棧實現(xiàn)隊列 首先要想到的是,隊列是一種 先進(jìn)先出 的結(jié)構(gòu),而棧是一種 先進(jìn)后出 的結(jié)構(gòu)。依此 我們可以定義兩個棧結(jié)構(gòu)來模擬先進(jìn)先出 ,既然要定義兩個棧,那么為了方便調(diào)用,我們可以將這兩個棧結(jié)構(gòu)定義在一個結(jié)構(gòu)體中,如下: 實現(xiàn)

    2024年02月03日
    瀏覽(28)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】232、LeetCode用棧實現(xiàn)隊列

    【算法與數(shù)據(jù)結(jié)構(gòu)】232、LeetCode用棧實現(xiàn)隊列

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :這道題要求我們用棧模擬隊列(工作上一定沒人這么搞)。程序當(dāng)中,push函數(shù)很好解決,直接將元素push進(jìn)輸入棧當(dāng)中。pop函數(shù)需要實現(xiàn)隊列先進(jìn)先出的操作,而棧是先進(jìn)后出。只

    2024年02月12日
    瀏覽(24)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】 C語言實現(xiàn)單鏈表隊列詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】 C語言實現(xiàn)單鏈表隊列詳解

    前面我們學(xué)習(xí)了隊列的順序表的實現(xiàn),本節(jié)將用單鏈表實現(xiàn)隊列。 隊列也可以數(shù)組和鏈表的結(jié)構(gòu)實現(xiàn), 使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組的結(jié)構(gòu),出隊列在數(shù)組頭上出數(shù)據(jù),效率會比較低 。下面我們先復(fù)習(xí)一下隊列的基本概念: 隊列:只允許在一端進(jìn)行插入

    2024年04月11日
    瀏覽(94)
  • 頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊列-第1關(guān):實現(xiàn)一個順序存儲的隊列

    頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-隊列-第1關(guān):實現(xiàn)一個順序存儲的隊列

    任務(wù)描述 相關(guān)知識 順序存儲的隊列 順序隊列的主要操作 編程要求 測試說明 任務(wù)描述 本關(guān)任務(wù):實現(xiàn) step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五個操作函數(shù),以實現(xiàn)判斷隊列是否為空、是否為滿、求隊列長度、隊列元素入隊和出隊等功能。 相關(guān)知

    2024年02月06日
    瀏覽(161)
  • 數(shù)據(jù)結(jié)構(gòu)與算法 —— 最短路徑Dijkstra算法(迪杰斯特拉)詳細(xì)圖解以及python實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)與算法 —— 最短路徑Dijkstra算法(迪杰斯特拉)詳細(xì)圖解以及python實現(xiàn)

    目錄 前言 1. 介紹 2. 加權(quán)圖 2.1 概念 3. 最短路徑 -- Dijkstra 算法 3.1 歷史 3.2 Dijkstra 算法的基本思路 3.3?Dijkstra 算法圖解 4.? python中dijkstra算法的實現(xiàn) 5. 總結(jié)? 前兩章我們講到了關(guān)于圖的基本知識,和廣度/深度優(yōu)先搜索。 本章,我們將介紹 加權(quán)圖 和 最短路徑 的相關(guān)知識。 最

    2024年02月12日
    瀏覽(21)
  • Python怎么實現(xiàn)更高效的數(shù)據(jù)結(jié)構(gòu)和算法? - 易智編譯EaseEditing

    Python怎么實現(xiàn)更高效的數(shù)據(jù)結(jié)構(gòu)和算法? - 易智編譯EaseEditing

    要實現(xiàn)更高效的數(shù)據(jù)結(jié)構(gòu)和算法,你可以考慮以下幾個方面的優(yōu)化: 選擇合適的數(shù)據(jù)結(jié)構(gòu): 選擇最適合你問題的數(shù)據(jù)結(jié)構(gòu)至關(guān)重要。例如,如果需要頻繁插入和刪除操作,可能鏈表比數(shù)組更合適。如果需要高效查找操作,考慮使用哈希表或平衡樹。 算法優(yōu)化: 研究并實現(xiàn)最

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包