計算機的做用:
就是用來存儲和運算二進制的數據
變量的概念:
就是計算機中的某一塊內存空間
衡量計算機內存大小的範圍: bit byte kb mb
計算機中內存空間都會有兩個基本的屬性 大小 地址
不一樣數據佔用內存空間的大小 整數:4byte float:4byte double:8byte 字符:1byte
理解a=10的內存圖(引用,指向)
指向:若是一個變量存儲了某一塊內存空間的地址,則表示該變量指向該塊內存
引用:若是一個變量存儲了某一塊內存空間的地址,則該變量能夠成爲該內存的一個引用
容器中存儲的元素是有順序的,順序表的結構能夠分爲兩種形式:單數據類型和多數據類型。
python中的列表和元組就屬於多數據類型的順序表
單數據類型順序表的內存圖(內存連續開啓)
多數據類型順序表的內存圖(內存非連續開闢)
順序表的弊端:順序表的結構須要預先知道數據大小來申請連續的存儲空間,而在進行擴充時又須要進行數據的搬遷。
#單類型順序表 數組 import numpy as np arr = np.array([1,2,3]) print(arr[1])
# 2
鏈表:相對於順序表,鏈表結構能夠充分利用計算機內存空間,實現靈活的內存動態管理且進行擴充時不須要進行數據搬遷。¶
鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,可是不像順序表同樣連續存儲數據,
而是每個結點(數據存儲單元)裏存放下一個結點的信息(即地址)
. is_empty():鏈表是否爲空
. length():鏈表長度
. travel():遍歷整個鏈表
. add(item):鏈表頭部添加元素
. append(item):鏈表尾部添加元素
. insert(pos, item):指定位置添加元素
. remove(item):刪除節點
. search(item):查找節點是否存在
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