對數據進行存儲和運算。首先咱們須要知道咱們目前使用的計算機都是二進制的計算機,就覺得着計算機只能夠存儲和運算二進制的數據。例以下載好的一部電影,該電影能夠存儲到計算機中,計算機中存儲的是基於二進制的電影數據,而後咱們能夠經過相關的視頻播放軟件結合相關的硬件對電影的二進制數據進行相關的運算操做,所產生的結果就是咱們能夠看到電影的畫面和聽到音頻的聲音。node
- 闡述:簡單理解爲,首先能夠將1和2輸入到計算機中,而後計算機會將1和2轉換成二進制的數據進行數據存儲,而後經過加法器進行兩個二進制數值的計算並返回結果。編程
- 分析:上述的闡述中提到,計算機首先須要存儲1和2這兩個數值,那麼計算機如何進行數據的存儲呢?那麼毫無疑問,計算機能夠將數據直接存儲到內存中。數據結構
- 變量:咱們在編程世界中,能夠將某個數值直接賦值給一個變量,可是最終數值會被存儲到計算機的內存中,所以咱們能夠理解爲,變量表示的就是計算機中進行數據存儲的某一塊內存。app
- 如何形象化的理解計算機的內存?spa
- 舉例:將計算機的內存空間映射到咱們現實生活中的話,內存就比如是咱們在現實生活中三維立體的空間。生活在北京的北漂們,幾乎都居住的是一個獨立的公寓或者合租在一個幾居室的某一個房間中,那麼北漂甲就比如是數據,而他所居住的房間則就是存儲數據的一塊內存空間。code
- 分析:從上述案例中,咱們能夠得知北漂甲居住的房間會有兩個基本的屬性,其一就是房間空間的大小,其二就是房間的一個位置標識(門牌號)。那麼計算機中存儲數據的內存空間也會有這兩個最基本的屬性:內存空間大小和內存空間的地址。內存空間的大小能夠表示該空間能夠存儲數據值的大小範圍,內存空間的地址(用十六進制數值表示)能夠用來經過尋址定位、查找到該內存空間中所存儲的數據值。視頻
- 如何理解 a = 10 這條賦值語句對應的內存圖呢?對象
- 引用:當一個變量中存儲的是某一塊內存空間的地址,則該變量便可成爲那塊內存空間的引用。a=10,a就是10所在內存空間的一個引用。blog
- 指向:當一個變量中存儲了一塊內存空間的地址,則稱該變量(引用)指向了那塊內存。ip
- 不一樣類型數據佔用內存空間的大小:整形(4字節),浮點型(8字節),字符型(1字節)
集合中存儲的元素是有順序的。順序表的結構能夠分爲兩種形式:單數據類型和多數據類型。
在內存中如何存儲 int a = 10,20,30,如何取得每個數據值呢?
單數據類型順序表的內存圖(內存連續開啓)
相對於順序表,鏈表結構能夠充分利用計算機內存空間,實現靈活的內存動態管理且進行擴充時不須要進行數據搬遷
單向鏈表也叫單鏈表,是表中最簡單的一種形式,它的每一個節點包含兩個域,一個信息域(元素域)和一個連接域。這個連接指向鏈表中的下一個節點,而最後一個節點的連接域則指向一個空值。
#封裝節點數據結構 class Node(): def __init__(self,item): #存放鏈表中的元素 self.item = item #存放下一個節點 self.next = None def __str__(self): return self.item #封裝鏈表數據結構 class Link(): #初始化一個空列表 def __init__(self): #該屬性永遠指向第一個節點 self._head = None def isEmpty(self): return self._head == None def add(self,item): #建立一個新的節點對象 node = Node(item) #將節點插入到鏈表的頭部,指向舊節點 node.next =self._head #指向新節點 self._head = node def travel(self): #cur等於第一個節點 cur = self._head #若是cur不等於空則繼續循環 while cur: print(cur.item) #此時cur等於下一個節點地址 cur = cur.next def length(self): count = 0 cur =self._head while cur: count +=1 cur = cur.next return count def append(self,item): cur = self._head #pre 表示cur前面節點的地址 pre = None node = Node(item) #若是鏈表爲空則新節點做爲鏈表中的第一個節點 if self._head is None: self._head =node return #鏈表非空對應的插入狀況 while cur: pre = cur cur = cur.next pre.next = node def insert(self,pos,item): cur = self._head pre = None node = Node(item) length = self.length() #對特殊狀況的處理 if pos >length: self.append(item) return if pos <=0: self.add(item) return #正常處理 for i in range(pos): pre = cur cur = cur.next pre.next = node node.next = cur def remove(self,item): cur = self._head pre = None #若是刪除的是第一個節點 if item == cur.item: self._head = cur.next return while cur: if cur.item == item: pre.next = cur.next return else: pre = cur cur = cur.next def search(self,item): find = False cur = self._head while cur: if cur.item == item: find = True break cur = cur.next return find link = Link() link.add(10) link.add("aa") link.append('wl') link.insert(11,666) link.travel() print(link.length())