一維數(shù)據(jù)結(jié)構(gòu)關(guān)系

前言

從數(shù)據(jù)結(jié)構(gòu)說起,面試了很多人,對于數(shù)據(jù)結(jié)構(gòu)總是說不清楚,有的說數(shù)組、鏈表,有的混進來、,甚至有的說不清隊列的區(qū)別。這里寫一篇博客,總結(jié)下常見的數(shù)據(jù)結(jié)構(gòu)認(rèn)識誤區(qū),就先從數(shù)組、鏈表開始吧。

區(qū)分

數(shù)組、鏈表是最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,是一維的數(shù)據(jù)結(jié)構(gòu),他們的區(qū)別是:

數(shù)組中元素地址連續(xù)的,鏈表中兩個元素地址不一定連續(xù),而是由專門的一個指針指明該元素的后一個(前一個)元素的地址。

在此之上再衍生出來的其他一維數(shù)據(jù)結(jié)構(gòu)包括:隊列、棧、堆。他們都是滿足一定規(guī)則、或者說一定特性的數(shù)組、鏈表的拓展。這些拓展數(shù)據(jù)結(jié)構(gòu),底層都可以使用數(shù)組或鏈表(基礎(chǔ)一維結(jié)構(gòu))來實現(xiàn)。

PS:比較特殊,是指用數(shù)組實現(xiàn)的二叉樹。

堆區(qū)、棧區(qū)

對于操作系統(tǒng)為程序運行區(qū)分的堆區(qū)、棧區(qū),也有很多的和堆、棧數(shù)據(jù)結(jié)構(gòu)搞混,這里介紹下什么是堆區(qū)、棧區(qū)。

堆區(qū)

由程序員調(diào)用malloc()函數(shù)來主動申請的,需使用free()函數(shù)來釋放內(nèi)存,若申請了堆區(qū)內(nèi)存,之后忘記釋放內(nèi)存,很容易造成內(nèi)存泄漏

棧區(qū)

棧區(qū)由編譯器自動分配釋放,存放函數(shù)的參數(shù)值、返回值和局部變量,在程序運行過程中實時分配和釋放,棧區(qū)由操作系統(tǒng)自動管理,無須手動管理。棧區(qū)是先進后出原則,即先進去的被堵在屋里的最里面,后進去的在門口,釋放的時候門口的先出去。

程序內(nèi)存分布

補充:
代碼區(qū):存放程序的代碼,即CPU執(zhí)行的機器指令,并且是只讀的。
常量區(qū):存放常量(程序在運行的期間不能夠被改變的量,例如: 10,字符串常量”abcde”, 數(shù)組的名字等)
靜態(tài)區(qū)(全局區(qū)):靜態(tài)變量和全局變量的存儲區(qū)域是一起的,一旦靜態(tài)區(qū)的內(nèi)存被分配, 靜態(tài)區(qū)的內(nèi)存直到程序全部結(jié)束之后才會被釋放

小結(jié)

這期介紹了一些一維數(shù)據(jù)結(jié)構(gòu),哪些是基礎(chǔ)存在的,哪些是衍生的。后續(xù)會將其中每一個拎出來講,側(cè)重點是實現(xiàn)方法和其中的優(yōu)化點。不要小看了數(shù)據(jù)結(jié)構(gòu),很多巧妙的思想都是可以在這些數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)中找到。

參考

http://www.itdecent.cn/p/afbfc784238a
https://blog.csdn.net/u014470361/article/details/79297601

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容