數據結構 --- 02. 內存, 順序表, 單鏈表

一.內存

  1.基本概念

計算機的做用:
  就是用來存儲和運算二進制的數據


變量的概念:
  就是計算機中的某一塊內存空間
 

 

衡量計算機內存大小的範圍:
  bit
  byte
  kb
  mb

計算機中內存空間都會有兩個基本的屬性   大小   地址

 

不一樣數據佔用內存空間的大小
  整數:4byte
  float:4byte
  double:8byte
  字符:1byte

 

理解a=10的內存圖(引用,指向)
  指向:若是一個變量存儲了某一塊內存空間的地址,則表示該變量指向該塊內存   引用:若是一個變量存儲了某一塊內存空間的地址,則該變量能夠成爲該內存的一個引用

 

二.順序表


容器中存儲的元素是有順序的,順序表的結構能夠分爲兩種形式:單數據類型和多數據類型。
python中的列表和元組就屬於多數據類型的順序表

 

單數據類型順序表的內存圖(內存連續開啓)
多數據類型順序表的內存圖(內存非連續開闢)
順序表的弊端:順序表的結構須要預先知道數據大小來申請連續的存儲空間,而在進行擴充時又須要進行數據的搬遷。

 

  1.單數據類型

 

#單類型順序表 數組
import numpy as np
arr = np.array([1,2,3])
print(arr[1])

# 2

 

 

 

  2.多類型數據結構

 

 三.單鏈表

鏈表:相對於順序表,鏈表結構能夠充分利用計算機內存空間,實現靈活的內存動態管理且進行擴充時不須要進行數據搬遷。¶
鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,可是不像順序表同樣連續存儲數據,
而是每個結點(數據存儲單元)裏存放下一個結點的信息(即地址)

 

 

   1.基本操做

. is_empty():鏈表是否爲空

. length():鏈表長度

. travel():遍歷整個鏈表

. add(item):鏈表頭部添加元素

. append(item):鏈表尾部添加元素

. insert(pos, item):指定位置添加元素

. remove(item):刪除節點

. search(item):查找節點是否存在

 

   2.代碼結構

class Node():
    def __init__(self,item):
        self.item = item
        self.next = None #存儲的鏈表中下一個節點的地址
class Link():
    def __init__(self):
        #_head永遠指向None或者第一個節點的地址
        self._head = None      
    def add(self,item):
        node = Node(item)
        node.next = self._head
        self._head = node
    def travel(self):
        #cur存儲的就是第一個節點的地址
        cur = self._head
        while cur:
            print(cur.item)
            cur = cur.next
    def is_Empty(self):
        return self._head == None
    def size(self):
        length = 0
        if self._head == None:
            return length
        #cur就是指向了第一個節點
        cur = self._head
        while cur:
            length += 1
            cur = cur.next
        return length
    def append(self,item):
        node = Node(item)
        #若是鏈表爲空則執行以下操做
        if self._head == None:
            self._head = node
            return
        
        cur = self._head
        pre = None
        while cur:
            pre = cur
            cur = cur.next
        pre.next = node
        
    def search(self,item):
        ex = False
        
        cur = self._head
        while cur:
            if cur.item == item:
                ex = True
                break
            cur = cur.next
        return ex
    def insert(self,pos,item):
        node = Node(item)
        
        if pos <= 0:
            self.add(item)
            return
        if pos >= self.size():
            self.append(item)
            return
        
        cur = self._head
        pre = None
        
        for i in range(0,pos):
            pre = cur
            cur = cur.next
        pre.next = node
        node.next = cur
    def remove(self,item):
        cur = self._head
        pre = None
        if cur.item == item:
            self._head = cur.next
            return
        while cur:
            pre = cur
            cur = cur.next
            if cur.item == item:
                pre.next = cur.next
                break
        

 

link = Link()
link.add(1)
link.add(2)
link.add(3)
link.append(4)
# link.insert(-2,'hello')
link.remove(3)
link.travel()
結果:

2
1 4
相關文章
相關標籤/搜索