sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意
背景
早在linux操作系統誕生開始,c語言作為linux系統的編程語言主力,它為后續的其他高級編程語言(如c++、java)提供了很多語言級的語義和協議規范。
數組做為linux操作系統最基本的數據結構之一,便是其中的一項語言級高級特性,深入理解數組有助于大家更深入的了解計算機系統原理。
尋址:從0開始
首先,我們了解下數組的基本特性
1、線性表結構
2、一組連續的內存空間
3、存儲相同類型數據
由數組的基本特性可知:數組所申請的內存是一段連續的內存地址,其存儲的是相同類型的值。
從其數組內存模型定義來看,數組的訪問是從首地址(偏移量為0)開始,如果想訪問下一個數組元素,需要把位置偏移,也就是數組內存尋址時,需要把偏移量變為1,以此類推。
計算數組內存尋址公式:
array[i] = base_address + i * data_type_size
參數說明
舉個例子:
1、定義一個int 數據類型的數組,a為變量,數組長度為5
int[] a=new int[5]2、假設數組地址:
3、尋址:由公式:array[i] = base_address + i * data_type_size
a[0]——把a拿到的內存地址:
1008 + 0 = 1008 (指向第一個內存地址)a[1]——把a拿到的內存地址:
1008 + 1 = 1009 (指向第二個內存地址)a[2]——把a拿到的內存地址:
1008 + 2 = 1010 (指向第三個內存地址)以此類推。。。
關心話題(一):數組下標為什么不從1開始
cpu消耗
如果數組從1開始編號,公式為a[i] = base_address + (i -1) * data_type_size,對cpu而言,”i -1“就多了一次減法指令。
歷史原因
c語言的設計者使用了0開始編號,后續的很多高級編程語言也就沿用了這個規范,降低額外的學習和理解成本。
關心話題(二):隨機訪問
由于數組是線性結構,那么根據首地址和偏移量就可以計算出任意數組元素的內存地址
array[i] = base_address + i * data_type_sizejava面試題:數組和鏈表的區別
1、鏈表適合插入和刪除,時間復雜度是O(1)
2、數組適合查找,查找的時間復雜度為O(1)
究其原因是數組支持隨機訪問,根據下標隨機訪問的時間復雜度是O(1),而鏈表需要從頭開始尋址,直到找到對應的元素地址才結束,其復雜度為O(logn) 。
關心話題(三):集合能替代數組嗎?
數組和集合最大一個區別于在于數組能直接存儲基本的數據類型(如int、float、long等);而集合只能通過裝箱和拆箱存儲基本數據類型,代價是需要消耗性能。另外使用多維數組時,用數組會直觀一些。
jvm標記清除算法
為了避免數組大規模的數據搬移,可以將k位置的數據直接搬移到數組末尾位置,再把新數據放到k位置。刪除時,可以將要刪除的數據標記下來,當數組沒有足夠的空間時,將標記的數據統一刪除,就可以提高很大的性能,也就是jvm標記清除垃圾回收的思想 。
總結
大部分高級程序語言的數組下標是從0開始的,而python數組下標卻可以支持負數 。
最后
如果覺得本文對您有幫助的話,記得關注、轉發哦,我會為大家持續提供原創干貨。需要資料,請關注、轉發,私信“資料”面試+微服務+springboot資料免費贈送。
總結
以上是生活随笔為你收集整理的sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样移植毛发
- 下一篇: python 求和并排序_Python算