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

【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié)

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

【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表

??個(gè)人主頁:?Aileen_0v0
??系列專欄:PYTHON學(xué)習(xí)系列專欄
??"沒有羅馬,那就自己創(chuàng)造羅馬~"??

目錄

線性數(shù)據(jù)結(jié)構(gòu)Linear DS

1.棧Stack

棧的兩種實(shí)現(xiàn)

1.左為棧頂,時(shí)間復(fù)雜度為O(n)

2.右為棧頂,時(shí)間復(fù)雜度O(1)??

2.隊(duì)列Queue

3.雙端隊(duì)列Deque

4.列表List

5.鏈表

a.無序鏈表的實(shí)現(xiàn)

b.有序鏈表的實(shí)現(xiàn)


【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表

線性數(shù)據(jù)結(jié)構(gòu)Linear DS

作用:將數(shù)據(jù)項(xiàng)以某種線性的次序組織起來

1.棧Stack

  • 【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表

棧Stack維持了數(shù)據(jù)項(xiàng)后進(jìn)先出LIFO的次序
stack基本操作包括push,pop,isEmpty

棧的兩種實(shí)現(xiàn)

1.左為棧頂,時(shí)間復(fù)雜度為O(n)
#左邊為頂,右邊為低
class Stack:
    def __init__(self):
        self.items = []
 
    def isEmpty(self):
        return self.items == []
 
    def push(self,item):
        self.items.insert(0,item)
 
    def pop(self):
        return self.items.pop(0)
 
    def peek(self):
        return self.items[0]
 
    def size(self):
        return len(self.items)
2.右為棧頂,時(shí)間復(fù)雜度O(1)??
# 左邊為低,右邊為頂--->更高效
class Stack:#Stack---->ADT
    def __init__(self):
        self.items =[]
 
    def isEmpty(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)
 
s = Stack()

鏈接??:?

2.隊(duì)列Queue

【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表
隊(duì)列Queue維持了數(shù)據(jù)項(xiàng)先進(jìn)先出FIFO的次序
queue基本操作包括enqueue, dequeue,isEmpty 有助于構(gòu)建時(shí)序模擬

書寫表達(dá)式的方法前綴prefix、中綴infix和后綴postfix三種由于棧結(jié)構(gòu)具有次序反轉(zhuǎn)的特性,所以棧結(jié)構(gòu)適合用于開發(fā)表達(dá)式求值和轉(zhuǎn)換的算法
“模擬系統(tǒng)”可以通過一個(gè)對(duì)現(xiàn)實(shí)世界問題進(jìn)行抽象建模,并加入隨機(jī)數(shù)動(dòng)態(tài)運(yùn)行為復(fù)雜問題的決策提供各種情況的參考隊(duì)列queue可以用來進(jìn)行模擬系統(tǒng)的開發(fā)

【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表

【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié),數(shù)據(jù)結(jié)構(gòu)與算法,python學(xué)習(xí),python,開發(fā)語言,人工智能,算法,數(shù)據(jù)結(jié)構(gòu),線性回歸,鏈表

?鏈接??:

3.雙端隊(duì)列Deque

雙端隊(duì)列Deque可以同時(shí)具備棧和隊(duì)列的功能

deque的主要操作包括addFront,addRear, removeFront, removeRear, isEmpty

#創(chuàng)建一個(gè)雙端隊(duì)列(Dequeue)
class Dequeue:
    #定義一個(gè)初始化函數(shù)然后創(chuàng)建一個(gè)空列表用于傳遞數(shù)據(jù)items
    def __init__(self):
        self.items = []
 
    #判斷列表是否為空
    def isEmpty(self):
        return self.items == []
 
     #在隊(duì)首加入元素items
    def addFront(self,item):
        self.items.append(item)
 
    #在隊(duì)尾加入元素items
    def addRear(self,item):
        self.items.insert(0,item)
 
 
    #從隊(duì)首移除數(shù)據(jù),返回值為移除數(shù)據(jù)項(xiàng)
    def removeFront(self):
        return self.items.pop()
 
    #從隊(duì)尾移除數(shù)據(jù),返回移除數(shù)據(jù)項(xiàng)
    def removeRear(self):
        return self.items.pop(0)
 
    #判斷列表是否為空
    def isEmpty(self):
        return self.items == []
 
    #返回Dequeue中包含的數(shù)據(jù)項(xiàng)的個(gè)數(shù)
    def size(self):
        return len(self.items)
 
#palindrome - 回文檢查
def  pal_checker (ps):
    #實(shí)例化對(duì)象
    d = Dequeue()
    for char in  ps:
        d.addRear(char)
 
    #假設(shè)元素左右相等
    still_equal = True
    #依次取出首尾元素進(jìn)行判斷,然后再判斷它是否滿足 :
    # 奇數(shù)個(gè)元素的時(shí)候,雙端隊(duì)列里面還剩下一個(gè)元素
    #偶數(shù)個(gè)元素的時(shí)候,雙端隊(duì)列里面沒有元素
    while d.size() > 1 and still_equal :
        #從隊(duì)首取出一個(gè)元素
        first = d.removeFront()
        #從隊(duì)尾取出一個(gè)元素
        last = d.removeRear()
        if first != last:
            still_equal = False
    return still_equal
 
print(pal_checker ("上海自來水來自海上"))
print(pal_checker ("110110"))

鏈接??:?

4.列表List

列表List是數(shù)據(jù)項(xiàng)能夠維持相對(duì)位置的數(shù)據(jù)集

# 通過鏈表實(shí)現(xiàn) 無序表-列表
#列表 和 鏈表 都是無序表 unordered list
#實(shí)現(xiàn)鏈表
class Node:
    def __init__(self,init_data):
        self.data = init_data
        self.next = None
    #獲得數(shù)據(jù)項(xiàng)
    def get_data(self):
        return self.data
    #獲得節(jié)點(diǎn)
    def get_next(self):
        return self.next
    #設(shè)置數(shù)據(jù)項(xiàng)
    def set_data(self,new_data):
        self.data = new_data
    #設(shè)置節(jié)點(diǎn)
    def set_next(self,new_next):
        self.next = new_next
 
#結(jié)點(diǎn)示例
temp = Node(93)
print(temp.get_data())

鏈接??:?

5.鏈表

鏈表的實(shí)現(xiàn),可以保持列表維持相對(duì)位置(保證邏輯順序)的特點(diǎn),而不需要連續(xù)的存儲(chǔ)空間
鏈表實(shí)現(xiàn)時(shí),其各種方法,對(duì)鏈表頭部head需要特別的處理?

a.無序鏈表的實(shí)現(xiàn)

# 通過鏈表實(shí)現(xiàn) 無序表-列表
#列表 和 鏈表 都是無序表 unordered list
#實(shí)現(xiàn)鏈表 -- 鏈表相當(dāng)于火車(順藤摸瓜結(jié)構(gòu),如果放在鏈表后面,找那個(gè)車廂需要從頭開始往后找)
class Node:#結(jié)點(diǎn)Node相當(dāng)于車廂
    def __init__(self,init_data):
        self.data = init_data
        self.next = None
    #獲得數(shù)據(jù)項(xiàng)
    def get_data(self):
        return self.data
    #獲得節(jié)點(diǎn)
    def get_next(self):
        return self.next
    #設(shè)置數(shù)據(jù)項(xiàng)
    def set_data(self,new_data):
        self.data = new_data#屬性
    #設(shè)置節(jié)點(diǎn)
    def set_next(self,new_next):
        self.next = new_next#屬性

#結(jié)點(diǎn)示例
temp = Node(93)
temp2 = Node(17)
temp3 = Node(77)
print(temp.get_data())
print(temp2.get_data())
print(temp3.get_data())


# 鏈表:1.有序表 2.無序表
#鏈表實(shí)現(xiàn): 無序表 UnorderedList
#設(shè)立一個(gè)屬性head , 保存對(duì)對(duì)第一個(gè)節(jié)點(diǎn)的引用
#空表的 head 為 None
class UnorderedList:
    def __init__(self):
        self.head = None
# mylist = UnorderedList()
# print (mylist.head)

    #為item數(shù)據(jù)項(xiàng)生成一個(gè)結(jié)點(diǎn)-Node 叫做item
    def add(self,item):
        #然后將這個(gè)結(jié)點(diǎn)命名為臨時(shí)變量
        temp = Node(item)
        #將下一個(gè)臨時(shí)結(jié)點(diǎn)設(shè)置為表頭
        temp.set_next(self.head)
        #表頭指向新增加的臨時(shí)結(jié)點(diǎn)
        self.head = temp

    def size(self):
        #當(dāng)前節(jié)點(diǎn)設(shè)為表頭第一個(gè)節(jié)點(diǎn)
        current = self.head
        count = 0
        while current != None:
            count += 1
            #將當(dāng)前節(jié)點(diǎn)設(shè)為下一個(gè)結(jié)點(diǎn)的結(jié)點(diǎn),循環(huán)往復(fù)
            current = current.get_next()
                #返回結(jié)點(diǎn)的個(gè)數(shù)
        return count

    def search(self,item):
        current = self.head
        found = False
        while current != None and not found:
            #判斷當(dāng)前節(jié)點(diǎn)數(shù)據(jù)項(xiàng)是否等于我想要找的數(shù)據(jù)
            if current.get_data() == item:
                found = True
            else:
                current = current.get_next()
        return found

    def remove(self,item):#刪除找到的元素--引用兩個(gè)指針當(dāng)前和上繼指針
        current = self.head
        previous = None
        found = False
        #先判斷是不是我要找的那個(gè)元素
        while not found:
            if current.get_data == item:
                found = True
            else:
                #通過current的指針給初始沒有指針的previous指路
                previous = current
                #然后current指針繼續(xù)往下走
                current = current.get_next

# 如果中間位置找不到,那我們?cè)倥袛啾眍^
#當(dāng)前刪除的車廂部位值item 位于頭部時(shí),可以利用 previous 指向空
        if previous == None:#當(dāng)前想要?jiǎng)h除的是不是車頭處的元素
            self.head = current.get_next()
        else:
            previous.set_next(current.get_next())#刪除的是中間元素

    def traverse(self):
        current = self.head
        while current != None:
            print(current.get_data())
            current = current.get_next()

#實(shí)例化無序表:
ll  = UnorderedList()

# 加入新節(jié)點(diǎn)
ll.add(7)
ll.add(9)
ll.add(6)
ll.add(8)
ll.add(10)

print(ll.search(1000))
ll.traverse()

b.有序鏈表的實(shí)現(xiàn)

class Node:#結(jié)點(diǎn)Node相當(dāng)于車廂
    def __init__(self,init_data):
        self.data = init_data
        self.next = None
    #獲得數(shù)據(jù)項(xiàng)
    def get_data(self):
        return self.data
    #獲得節(jié)點(diǎn)
    def get_next(self):
        return self.next
    #設(shè)置數(shù)據(jù)項(xiàng)
    def set_data(self,new_data):
        self.data = new_data#屬性
    #設(shè)置節(jié)點(diǎn)
    def set_next(self,new_next):
        self.next = new_next#屬性

class Orderedlist:
    def __init__(self):
        self.head = None

    def search(self,item):
        current = self.head
        found = False
        stop = False
        while current != None and not found and not stop:
            if current.get_data() == item:
                found = True
            else:
                if current.get_data()  > item:
                    stop = True
                else:
                    current = current.get_next()
        return found

    def add(self,item):
        current = self.head#指針1
        previous = None#p2
        stop = False
        while current != None and not stop:
            #發(fā)現(xiàn)插入位置
            if current.get_data() > item:
                stop = True
            else:
                previous = current
                current = current.get_next()

        temp = Node(item)
        #插在表頭
        if previous == None:
            temp.set_next(self.head)
            self.head = temp
        #插在表中
        else:
            temp.set_next(current)
            previous.set_next(temp)

    def size(self):
        current = self.head
        count = 0
        while current != None:
            count += 1
            current = current.get_next()
        return count


    def remove(self, item):
        current = self.head
        previous = None
        found = False
        while not found and current != None:
            if current.get_data() == item:
                found = True
            else:
                previous = current
                current = current.get_next()
        if found:
            if previous == None:
                self.head = current.get_next()
            else:
                previous.set_next(current.get_next())

    def traverse(self):
        current = self.head
        while current != None:
            print(current.get_data())
            current = current.get_next()

ol = Orderedlist()
ol.add(7)
ol.add(9)
ol.add(6)
ol.add(8)
ol.add(10)
print(ol.search(6))
ol.traverse()

鏈接??:文章來源地址http://www.zghlxwxcb.cn/news/detail-756821.html

到了這里,關(guān)于【Python數(shù)據(jù)結(jié)構(gòu)與算法】線性結(jié)構(gòu)小結(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • Python數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)據(jù)結(jié)構(gòu)(列表、棧、隊(duì)列、鏈表)

    Python數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)據(jù)結(jié)構(gòu)(列表、棧、隊(duì)列、鏈表)

    數(shù)據(jù)結(jié)構(gòu)是指相互之間存在這一種或者多種關(guān)系的數(shù)據(jù)元素的集合和該集合中元素之間的關(guān)系組成。 簡(jiǎn)單來說,數(shù)據(jù)結(jié)構(gòu)就是設(shè)計(jì)數(shù)據(jù)以何種方式組織并存儲(chǔ)在計(jì)算機(jī)中。 比如:列表、集合與字典等都是一種數(shù)據(jù)結(jié)構(gòu)。 N.Wirth:“程序=數(shù)據(jù)結(jié)構(gòu)+算法” 數(shù)據(jù)結(jié)構(gòu)按照其 邏輯結(jié)

    2024年02月08日
    瀏覽(36)
  • Python數(shù)據(jù)結(jié)構(gòu)與算法-樹

    Python數(shù)據(jù)結(jié)構(gòu)與算法-樹

    詳情見 https://blog.csdn.net/little_limin/article/details/129845592 Python數(shù)據(jù)結(jié)構(gòu)與算法-堆排序(NB組)—— 一、樹的基礎(chǔ)知識(shí) 樹結(jié)構(gòu)也是鏈?zhǔn)酱鎯?chǔ)的,與鏈表的結(jié)構(gòu)相似,只是樹存在多個(gè)子節(jié)點(diǎn),不是線性的,存在一堆多的情況。與雙鏈表相似,只不過鏈表節(jié)點(diǎn)對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn)只有一

    2023年04月15日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)與算法 - 線性表

    數(shù)據(jù)結(jié)構(gòu)與算法 - 線性表

    編程要求 本關(guān)任務(wù)是實(shí)現(xiàn) step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三個(gè)操作函數(shù),以實(shí)現(xiàn)線性表中數(shù)據(jù)的插入、刪除與查找等功能。具體要求如下: SL_InsAT: 在順序表的位置i插入結(jié)點(diǎn)x,即插入d[i]之前,i的有效范圍[0,slist-len]; SL_DelAt:刪除順序表slist的第i號(hào)結(jié)點(diǎn), i的有

    2024年02月01日
    瀏覽(27)
  • Rust 數(shù)據(jù)結(jié)構(gòu)與算法:2線性數(shù)據(jù)結(jié)構(gòu) 之 棧

    Rust 數(shù)據(jù)結(jié)構(gòu)與算法:2線性數(shù)據(jù)結(jié)構(gòu) 之 棧

    1、線性數(shù)據(jù)結(jié)構(gòu) 數(shù)組、棧、隊(duì)列、雙端隊(duì)列、鏈表這類數(shù)據(jù)結(jié)構(gòu)都是保存數(shù)據(jù)的容器,數(shù)據(jù)項(xiàng)之間的順序由添加或刪除時(shí)的順序決定,數(shù)據(jù)項(xiàng)一旦被添加,其相對(duì)于前后元素就會(huì)一直保持位置不變,諸如此類的數(shù)據(jù)結(jié)構(gòu)被稱為線性數(shù)據(jù)結(jié)構(gòu)。線性數(shù)據(jù)結(jié)構(gòu)有兩端,稱為“左

    2024年02月21日
    瀏覽(27)
  • python算法與數(shù)據(jù)結(jié)構(gòu)---動(dòng)態(tài)規(guī)劃

    python算法與數(shù)據(jù)結(jié)構(gòu)---動(dòng)態(tài)規(guī)劃

    記不住過去的人,注定要重蹈覆轍。 對(duì)于一個(gè)模型為n的問題,將其分解為k個(gè)規(guī)模較小的子問題(階段),按順序求解子問題,前一子問題的解,為后一子問題提供有用的信息。在求解任一子問題時(shí),通過決策求得局部最優(yōu)解,依次解決各子問題。最后通過簡(jiǎn)單的判斷,得到

    2024年02月20日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法_01_線性表】線性表

    定義 ● 線性表 具有相同數(shù)據(jù)類型**(同類型)**的n個(gè)數(shù)據(jù)元素有限序列 ● 三方面 ● 定義 邏輯結(jié)構(gòu) ● 相同數(shù)據(jù)類型 ● 每個(gè)數(shù)據(jù)元素所占的空間相同 ● 有限 ● 有限個(gè)元素 ● 序列 ● 是有次序的 ● 基本操作 操作— 基本操作 運(yùn)算 ● 創(chuàng)建線性表【initList(L)】 ● 初始化線

    2024年02月11日
    瀏覽(54)
  • 數(shù)據(jù)結(jié)構(gòu)與算法【02】—線性表

    數(shù)據(jù)結(jié)構(gòu)與算法【02】—線性表

    CSDN系列專欄:數(shù)據(jù)結(jié)構(gòu)與算法專欄 針對(duì)以前寫的數(shù)據(jù)結(jié)構(gòu)與算法系列重寫(針對(duì)文字描述、圖片、錯(cuò)誤修復(fù)),改動(dòng)會(huì)比較大,一直到更新完為止 通過前面數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)知識(shí)我們知道了數(shù)據(jù)結(jié)構(gòu)的一些概念和重要性,那么本章總結(jié)下線性表相關(guān)的內(nèi)容。當(dāng)然,我用自己

    2024年02月05日
    瀏覽(64)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之Python實(shí)現(xiàn)——隊(duì)列

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

    在上一期博客中我們學(xué)習(xí)了棧這種結(jié)構(gòu),本期博客將學(xué)習(xí)一下跟棧很類似的一種結(jié)構(gòu)——隊(duì)列。 本期知識(shí)點(diǎn): 順序隊(duì)列 循環(huán)隊(duì)列 鏈?zhǔn)疥?duì)列 隊(duì)列的應(yīng)用 ?? 什么是隊(duì)列? 隊(duì)列是一種跟棧很相似的結(jié)構(gòu)。我們知道棧是一種 先進(jìn)后出 的結(jié)構(gòu),那么隊(duì)列就像一個(gè)排隊(duì)的隊(duì)伍一樣

    2024年02月06日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)與算法Python版:基數(shù)排序

    簡(jiǎn)介 :基數(shù)排序(radix sort)屬于“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達(dá)到排序的作用,基數(shù)排序法是屬于穩(wěn)定性的排序,其時(shí)間復(fù)雜度為O (nlog?m),其中

    2024年01月24日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】python實(shí)現(xiàn)二分查找

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

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

    2024年02月05日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包