資料結構自學的方法:首先第一階段認識資料結構,了解基本組成及效能;然後第二階段深入資料結構,掌握相關特性,會寫程式碼;最後第三階段檢索資料結構,將所學知識點運用到實際問題中。
資料結構自學的方法:
第一階段:認識資料結構
第一步:學習它就應該知道陣列、鍊錶、堆疊、佇列、散列表、跳表、圖、樹、堆疊、字典樹10種資料結構用來幹什麼,為什麼,怎麼做,小鹿建議去看一些基礎的資料結構書籍或借助百度和谷歌簡單了解一下每種資料結構用來幹什麼,為什麼,怎麼做就可以了,然後可以簡單做一下筆記和部落格。
第二步:每種資料結構都有它的優缺點和效能的好壞,那我們以什麼標準來衡量資料結構與演算法的效能好快呢?那第二步就學習時間複雜度、空間複雜度相關的複雜度分析的內容,這部分內容至關重要,因為後邊要學到的資料結構與演算法都要有一個衡量效能標準的,為了能夠不同的問題解決選擇出效能最優的資料結構和演算法。
第二階段:深入資料結構
#第一步:寫入程式碼。上邊最基本的十種資料結構相關特性和使用條件都做筆記了,然後我們從頭開始對每種資料結構進入深入研究,首先資料結構涉及到的操作,例如增、刪、改、查等操作要自己實作一遍,在機器上運行一遍,寫程式碼的時候一定要注意以下幾點:邊界條件、指標、程式碼的規格。
這樣會使你更加的對程式碼有顆敬畏之心,每次寫程式碼都要認真對待,如果機器上寫程式碼沒問題了,可以自己透過在筆記本上用筆手寫親自實現一遍,有利於你加深你的程式碼邏輯的理解。
第二步:在第一階段中我們了解到效能的衡量標準,那麼下一步就再回過頭來對10種最常用的幾種資料結構涉及到的操作進行性能分析。你可能會問,為什麼不邊寫程式碼邊進行效能分析呢?我覺得分階段的好處就是能集中解決問題,寫程式碼就是要鍛鍊寫程式碼的思考邏輯能力,效能分析就是要提升自己的分析能力,效能分析完成之後再寫的程式碼有哪些可以進行最佳化改進的。這段期間你會遇到各種問題,遇到問題怎麼做,我通常會去百度或谷歌借助別人寫的文章進行總結記錄到筆記本上。
第三步:每種資料結構的效能分析完成之後,再進行對每個資料進行深入。第一階段我推薦的是看一些基礎的書籍,牽涉到的知識層次不深。但是我們還是要至少手中有一本具有權威性深入解析的資料結構書籍才能對一些概念有深入的理解。基礎書籍畢竟是讓你入門的嘛,我們可以透過這些權威性高、內容全面的對已學到的資料結構知識點進行查缺補漏。
第四步:單獨的深入學習真的很枯燥雜麼辦,那麼我們就實際生活中的例子去分析,例如猜數字遊戲、0/1背包問題、走迷宮、八皇后問題以及滿減湊單問題等。如猜數字遊戲,我們可以想想怎麼才能在最短的時間內猜到正確的數字呢,可能你會想到使用二分查找。那好了,我們問一下自己二分查找存在的問題,這個過程中一定要多問自己為什麼,只有這樣你的知識層次才會得到擴展,比如二分查找如果數據中有重複數據怎麼解決?
我還是要強調一下,一定要多問自己為什麼,因為從心理學上來講,人的大腦符合最小阻力原則,就是思考的事情最不喜歡做,所以這裡我們要逆著來,才能進一步進行突破。如果你覺的上述兩個階段沒有問題了,我們就進行下面的第三階段檢索資料結構。
第三階段:檢索資料結構
第一步: 這時你可能學的非常多的關於資料結構的內容,但是很難運用,那怎麼能夠在實際實際問題中運用起來呢?我們前邊已經將零碎的知識點整理到筆記本了?接下來該怎麼做呢?我們可以藉助心智圖,對知識體系化整理,無論是複習鞏固都利於我們進一步加強。
第二步:上述整理成體系之後完畢之後,然後去谷歌或百度搜尋一下有明確解決方案的實際問題拿來進行分析學習,你到這些實際專案中會發現,許多問題涉及多個資料結構問題,我們前邊解決的還不過是針對單一的資料結構,那就嘗試著自己將資料結構之間建立聯繫,例如數組和鍊錶,每種資料結構都有優缺點,你在學習的過程中你會發現一個資料結構的優點正是另一資料結構的缺點,數組在記憶體空間是連續的,對CPU快取友好,而鍊錶在記憶體中是零碎記憶體空間,對CPU快取不友好,但是鍊錶可以動態擴容而數組不可以。
再例如為了提高程式的效率不得不用消耗更多的記憶體空間的資料結構去代替另一資料結構,如果記憶體緊張,對執行效率要求不高的話,我們又用省記憶體執行效率稍有不高的資料結構去代替佔記憶體大而執行快的資料結構。
第三步:學會將實際問題轉換成所學的資料結構。怎麼轉化呢?如:假如你是工程師,要對鍊錶實作快取的演算法進行最佳化你會怎麼解決?我們先將問題轉換成學過的資料結構,裡邊提到鍊錶,好那我們知道有鍊錶了,在分析用鍊錶實現了那些操作?淘汰數據、查找數據、快取數據,這三個操作裡邊都涉及到查找,我們不得不遍歷整個鍊錶,時間複雜度為O(n)。
那我們就想能不能對查找進行最佳化呢?根據問題或資料的特徵找適用的資料結構,快取的三個操作涉及到快速的插入、刪除、查詢數據,我們在大腦中快速的檢索可以快速的實現插入、刪除、查詢的資料結構有哪些?平衡二元樹、散列表、跳表等,例如我們選擇散列表,最後分析時間複雜度是不是優化了很多,否則我們再換另一種資料結構進行效能分析。
我們不難發現,實際問題就會一步一步的分解成了我們學習到的資料結構的基本操作分析,然後利用我們學到的資料結構的優缺點和效能分析得出最優解絕方法,但是在企業中遇到實際問題中往往比我們拿一些做練習的實際問題複雜的要多。
相關推薦:程式設計影片課程
以上是資料結構怎麼自學的詳細內容。更多資訊請關注PHP中文網其他相關文章!

二叉树是计算机科学中常见的数据结构,也是Java编程中常用的一种数据结构。本文将详细介绍Java中的二叉树结构。一、什么是二叉树?在计算机科学中,二叉树是一种树形结构,每个节点最多有两个子节点。其中,左侧子节点比父节点小,右侧子节点则比父节点大。在Java编程中,常用二叉树表示排序,搜索以及提高对数据的查询效率。二、Java中的二叉树实现在Java中,二叉树

想了解更多关于开源的内容,请访问:51CTO开源基础软件社区https://ost.51cto.com一、栈的概念栈由一系列对象对象组织的一个集合,这些对象的增加和删除操作都遵循一个“后进先出”(LastInFirstOut,LIFO)的原则。在任何时刻只能向栈中插入一个对象,但只能取得或者删除只能在栈顶进行。比如由书构成的栈,唯一露出封面的书就是顶部的那本,为了拿到其他的书,只能移除压在上面的书,如图:栈的实际应用实际上很多应用程序都会用到栈,比如:网络浏览器将最近浏览

PHP是一种广泛使用的脚本语言,被广泛用于Web开发,服务器端编程以及命令行编程等。随着PHP不断更新和发展,它也日益成为一个更强大的编程工具,为用户提供了更多的功能和更多的工具来开发高质量的应用程序。其中,数据结构是一个非常重要的领域,一种有效的数据结构可以大大提高程序的性能和可读性。在这篇文章中,我们将讨论PHP8中支持的新数据结构,这些新的数据结构将让

如何解决Java中遇到的代码性能优化问题随着现代软件应用的复杂性和数据量的增加,对于代码性能的需求也变得越来越高。在Java开发中,我们经常会遇到一些性能瓶颈,如何解决这些问题成为了开发者们关注的焦点。本文将介绍一些常见的Java代码性能优化问题,并提供一些解决方案。一、避免过多的对象创建和销毁在Java中,对象的创建和销毁是需要耗费资源的。因此,当一个方法

随着计算机科学的不断发展,数据结构与算法成为了计算机科学领域中最为基础、重要的模块。数据结构是一种组织和存储数据的方式,它是解决问题的基础。算法则是计算机科学的核心,它是指在计算机程序中解决问题的方法和技术。Java作为一种广泛应用的编程语言,其自带的数据结构和算法库是非常强大的,赋予了开发人员更多的力量。一、数据结构Java中提供了多种数据结构,包括数组

go语言数据结构有四大类:1、基础类型,包括整型(有符号和无符号整数)、浮点数、复数、字符串(由不可变的字节序列构成)、布尔值(只有true和false两个值);2、聚合类型,包括数组、结构体(是由任意个任意类型的变量组合在一起的数据类型);3、引用类型,包括指针、slice(是一个拥有相同元素的可变长度序列)、map、function、channel;4、接口类型。

在PHP中,数据结构是常见的编程概念之一。使用数据结构可以更有效地组织和管理数据,提高代码的可读性和可维护性。SPL(StandardPHPLibrary,标准PHP库)扩展是PHP中自带的一个功能强大的库,其中包含了许多常用的数据结构和算法,如集合、队列和堆栈等。本文将介绍SPL扩展,以及它在处理数据结构时的应用。SPL的简介SPL扩展是PHP内置的一

Go语言是一种支持并发编程的语言,它的内置数据结构非常丰富,可以满足不同场景下的需求。Go语言中实现数据结构的方式有多种,包括数组、切片、字典、链表和树。数组和切片是最基础的数据结构,它们都可以存储一组相同类型的元素。不同之处在于数组的长度是固定的,而切片则可以动态扩展。Go语言中使用数组和切片可以快速创建数据结构,例如著名的排序算法中的快速排序和归并排序都

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境