咱們如何把現實中大量並且很是複雜的問題以特定的數據類型(個體)和特定的存儲結構(個體的關係)保存到相應的主存儲器(內存)中,以及在此基礎上爲實現某個功能而執行的相應操做,這個相應的操做也叫作算法。
數據結構 == 個體 + 個體關係python
算法 == 對存儲數據的操做算法
數據結構是軟件中最核心的課程。
程序 = 數據的存儲 + 數據的操做 + 能夠被計算機執行的語言。數組
比較通俗的講,把全部的節點用一根線串起來的結構就稱之爲線性結構。線性結構分爲兩種方式:數組、鏈表。
數組須要一塊連續的內存空間來存儲,堆內存的要求比較高。若是咱們申請一個100M大小的數組,當內存中沒有連續的、足夠大的空間時,即便內存的剩餘可用空間大於100M,任然會申請失敗。而鏈表偏偏相反,它並不須要一塊連續的內存空間,他經過「指針」將一組零散的內存塊串聯起來使用,因此申請的是大小是100M的鏈表,name根本不會有問題。
數組,在python語言中成爲列表,是一種基本的數據結構類型。
注:列表的其餘問題,請百度python基礎。數據結構
鏈表的及誒單結構以下:指針
data爲自定義的數據,next爲下一個節點的地址。code
在Python語言中用面向對象組合的方式,代替指針指向,更加的方便,簡單,容易理解。對象
# Use The Linked List sort Liangshan Po 108 Heroes # class Hero(): def __init__(self, no=None, name=None, nick_name=None, next=None): self.no = no self.name = name self.nick_name = nick_name self.next = next def add_hero(head, hero): current_position = head while current_position.next and hero.no > current_position.next.no: current_position = current_position.next hero.next = current_position.next current_position.next = hero def get_all(head): current_position = head while current_position.next: print("編號:%s,姓名:%s,外號:%s" % ( current_position.next.no, current_position.next.name, current_position.next.nick_name)) current_position = current_position.next def delete_hero(head, hero): current_position = head if current_position.next: while current_position.next and current_position.next.no < hero.no: current_position = current_position.next current_position.next = current_position.next.next else: print("鏈表爲空") head = Hero() hero = Hero(1, '宋江', '及時雨') # hero1 = Hero(2, '盧俊義', '玉麒麟') # hero2 = Hero(3, '吳用', '智多星') # hero3 = Hero(5, '林沖', '豹子頭') # hero4 = Hero(4, '公孫勝', '入雲龍') # add_hero(head, hero) # add_hero(head, hero1) # add_hero(head, hero2) # add_hero(head, hero3) # add_hero(head, hero4) # get_all(head) print("---------------------") delete_hero(head, hero) get_all(head)