數據結構與算法,可以說是程式設計師的靈魂。大家在找工作面試的時候,尤其是大網際網路公司面試的時候,數據結構與算法必問,想要學好數據結構,首先你要高效而愉快地學習,作為優秀的程式設計師它可以在海量數據計算的時候,依然保持高速地計算。如果不想永遠是代碼工人,那讓我們來一起研究數據結構與算法吧,這篇主要講數據結構,算法後續更新。
線性結構與非線性結構
首先理解概念:
1,線性結構是我們作為一個常見的數據結構,它有什麼特點呢?主要是數據元素之間存在一對一的線性關係。
2,線性結構它有兩種不同的存儲結構,順序存儲和鏈式存儲結構,也是我們常說的數組和鍊表,如果按順序存儲的線性表我們稱為順序表,順序表的存儲元素是連續的。
3,鏈式存儲的線性表稱為鍊表,要注意的是鍊表中存儲的元素不一定是連續的,元素節點的存放數據元素以及相鄰元素地址信息。
4,我們比較常見的線性結構比如有數組、隊列、鍊表以及棧。
5,非線性結構主要包括:二維數組、樹結構、圖結構、廣義表、多維數組。
線性結構的隊列
1,在我們平時中的隊列合適使用在怎麼場景,如典型的是銀行排隊。
2,隊列它是一個有序的列表的,我們可以使用數組和鍊表來實現的。
3,隊列是遵循」先進先出「的原則,也就是說我們先存進去隊列的數據,我們就取出來,這點就類似我們平時排隊。
線性結構的鍊表
1,鍊表的每個節點包含的data數據域,next域指向下一個節點。
2,鍊表它是一個有序的列表。
3,鍊表的各個節點不一定是連續存儲的。
4,是以節點的方式來存儲也就是鏈式存儲。
5,鍊表的使用場景比如我們大量的插入和刪除的時候合適使用的鍊表,特點是任意位置插入與刪除比較高效。鍊表是常見的使用,面試也是高頻率,最近百度、騰訊、新浪面試題都問的單鍊表。
線性結構的棧(stack)
1,棧它是遵循「先進後出」的有序列表,好比就像一個桶,當我們裝滿東西的時候,取出來時最後放入先取出來,而第一個先裝進去的最後一個出來。
2,棧是一個限制線性表中元素的插入和刪除只能在線性表的同一端進行的,是一種比較特殊線性表,允許插入、刪除的一端為變化的一端,我們稱之為棧頂(top),而另一端為固定的一端,我們常稱為棧底(bottom)。
3,棧存儲數據時最先放入棧中的元素在棧底(bottom),最後一個存放的元素在棧頂(top),當我們刪除的時候元素剛好是相反的,最後放入的元素是最先被刪除,最先放入的元素是最後被刪除。
4,關於棧的引用場景有哪些呢,比如逆向輸出、子程序的調用、處理遞歸調用、表達式的轉換、圖的深度優化搜索法、二叉樹的遍歷等等,這些是比較常見的使用場景。
我從是大數據、Java後端開發領域,如有興趣或者在學習Java、大數據過程中遇到問題,可以在評論區留言,後續我會努力編寫網際網路技術方面的文章,對於感興趣的朋友、同學可以關注我或者私信我,一起學習。