python 数据库表结构转为类_顺序表数据结构在python中的应用
數(shù)據(jù)結(jié)構(gòu)不僅僅指的數(shù)據(jù)值在邏輯上的結(jié)構(gòu),更有在存儲(chǔ)空間上的位置結(jié)構(gòu),順序表,故名思意是有一定順序的數(shù)據(jù)結(jié)構(gòu)。順序表最基本模型如圖:
對(duì)于基本布局順序表而言,它存儲(chǔ)相同單元大小并且在內(nèi)存地址上連續(xù)的數(shù)據(jù),邏輯地址是其元素的邏輯順序,物理地址第一個(gè)元素的內(nèi)存地址加上離第一個(gè)元素的距離,如:e1物理地址是l0,那么e2的物理地址是e1的地址加上e1所占用的大小c,以此類推,en的物理地址是l0+(n-1)*c。
這種基本布局出現(xiàn)了一個(gè)問題,如果其中的元素大小不統(tǒng)一,那么豈不是要用最大存儲(chǔ)單元作為基本單位,非常浪費(fèi)空間,因此出現(xiàn)了外置順序表,它是將元素的索引以相同單元大小連續(xù)存放,索引記錄對(duì)應(yīng)數(shù)據(jù)在內(nèi)存上的地址,那么我們可以通過基本布局的方式去找到索引,再根據(jù)索引找到數(shù)據(jù)。
在熟悉了順序表的基本模型后,我們?cè)倏错槺淼慕Y(jié)構(gòu),如圖所示:
實(shí)際的順序表包含兩部分,一部分是順序表的記錄信息塊(含順序表容量、元素個(gè)數(shù)),一部分是數(shù)據(jù)塊,這兩部放在一起是一體式結(jié)構(gòu),如果分離通過索引連接是分離式結(jié)構(gòu)。
順序表含有容量和容量的使用情況信息,那么很容易就實(shí)現(xiàn)擴(kuò)容,其擴(kuò)容方式有兩種:一種是頻繁的固定擴(kuò)容,即每次增加固定單位的容量,因此會(huì)平凡擴(kuò)容;另一種是倍增的擴(kuò)容,即按照2、4、8、16這種方式來擴(kuò),這樣擴(kuò)容頻率低,但可能造成浪費(fèi)。
在python中l(wèi)ist和tuple都是順序表結(jié)構(gòu),list是動(dòng)態(tài)順序表,支持內(nèi)部結(jié)構(gòu)變化如增加或者減少元素,而tupele并不支持結(jié)構(gòu)的改變,其他性能和list一致。
既然我們知道了python中使用最頻繁的list內(nèi)在結(jié)構(gòu),那我們就應(yīng)該明白append是在順序表末尾增加一個(gè)元素,他的時(shí)間復(fù)雜度是O(1),而insert插入函數(shù)是將插入位置之后的元素依次向下挪動(dòng)一個(gè)位置,復(fù)雜度是O(n);同理刪除一個(gè)元素,當(dāng)刪除最后一個(gè)位置的元素pop()只是刪除循序表的最后一個(gè)位置元素,如果是刪除指定元素,那么該元素其后的元素依次挪動(dòng)一個(gè)位置其時(shí)間復(fù)雜度為O(n);
這便是數(shù)據(jù)結(jié)構(gòu)的意義,它對(duì)python性能的提升有指導(dǎo)性的作用。
總結(jié)
以上是生活随笔為你收集整理的python 数据库表结构转为类_顺序表数据结构在python中的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年朝鲜中国遇难者咋补偿了
- 下一篇: 中国第三艘国产航母的设计已经完成