日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构入门(一级)

發布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构入门(一级) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構和算法的入門:在這里我們先回答大家三個問題1. 為什么要學習數據結構2. 有哪些數據結構3. 學習數據結構的四種境界知道了這三個問題之后呢,再來進行具體內容的一個學習,先看第一個,為什么要學些數據結構?1.語文是從識字開始的,識字,組詞,造句,我們是從這個開始的,那么我們學習語文的最終目的是什么呢?比如我們學習語文的目的是寫小說,比如我們要寫文章了,比較大的文章,我們識字的最終的目的是寫小說,當我們識字,組詞,造句會了之后,能不能直接跳到寫小說去,肯定是不行的,這個中間隔著一塊內容,這塊內容就是寫作文,為什么要經過寫作文呢,寫作文有兩個目的,第一個每個小作文實際上就是一個小小說,就是你在寫作文的過程中你小小說的水平無形之中就已經提高了,寫作文其實也是在寫小說,是小小說,寫小說不僅是老師告訴你該怎么寫,這個列子大家應該都是可以理解的,這跟我們的數據結構有什么關系嗎,有,識字相當于我們學了一門語言,比如我們學了一個JAVASE,或者你學了一個C語言,或者你學了一個C++,光學一門語言就相當于我們識字階段,最終的目的就是開發項目,開發軟件,這是我們的最終目的,學了這個軟件之后,學了這個語言之后,能不能直接開發項目,中間最好再做一件事,就是寫作文,而這個寫作文是什么,比如說,他就好比是,學習數據結構,這個就知道了學習數據結構承前啟后的作用,學數據結構有什么作用呢,他首先就像我們寫作文一樣,首先是高級計算機程序設計的理論指導,因為我們要寫項目,我們寫項目遇到復雜的各種情況之后應該采用哪種數據結構來存儲數據,這是我們學習數據結構的時候需要知道的,它是我們學習高級計算機程序設計的理論指導,2. 學習數據結構不僅僅是理論,他其實也是在提升你的編碼能力3. 經常會被問到數據結構,為什么都喜歡問這個問題,因為從數據結構就可以看出你的基礎是否扎實,看你的套路,可以看出一個人的發展的后勁,并且數據 結構本身是有難度的這就是我們講的為什么要學習數據結構,給到大家一個理解的角度吧,通過這一點大家也知道,寫作文學數據結構的作用 再往下我們看第二個問題,有哪些數據 結構啊,我們在這里先給大家列舉一下:有線性表,有棧,有隊列,有串,有數組,有廣義表,實際上告訴大家,這些都是一種結構,都是線性表,我們先講一個最普通的線性表,而后面的一直到廣義表這兒,實際上都是線性表,只不過是有些是操作受限的,有些是類型受限制的一些線性表,還有就是樹,樹里面我們研究最多的還是二叉樹,我們還有圖,有這么多的數據結構,重點有兩個,一個是線性表,一個是二叉樹,一共有哪些數據結構我們已經知道了,對于數據結構來說,我們要講什么啊,對于數據結構來說,我們要講什么啊,我們要講三個內容,第一個內容我們要講以線性表為例,我們要講線性表的邏輯結構是什么,第二個我們要講存儲結構,他在計算機里面,內存里面,怎么來表示的,第三個呢是不僅是在內存里面,不僅是怎么表示,我們還要把各種操作實現了,什么操作呢,比如說,添加,更新,刪除,查詢,排序,對于線性表來說他的各種存儲結構,我們的這些操作應該怎么來實現,掌握了這些算法之后呢,在實際的項目中我們就可以直接的來使用,那對于添加,更新,刪除,查詢,排序操作中呢,我們對兩種操作,查詢,排序操作呢,單獨的拿出來,這個查詢排序,不是在每一種數據結構中都講的,每一種數據結構我們講添加,更新和刪除,主要是講這三個操作,而對于查詢和排序呢,我們放到最后作為兩個專題來講,這么一來我們準備的數據結構我們要講哪些內容呢大家就都知道了,1. 第一個是數據結構的算法和入門,一些基礎的知識大家都知道2. 第二呢要一次講解各種數據結構,線性表,棧和隊列,樹和二叉樹,圖,就是逐個講解線性結構的,當然這其中對于我們的串就不做說明了,就是我們JAVA里面學得字符串,數組我們在JAVA里面也學過,在這里就不講了,廣義表是一種比較特殊的表,用的也不多,感興趣的可以自己去學習,這里面一共分了這么四章,最主要的幾種數據結構,對每種結構講他的邏輯結構,存儲結構,還有添加,更新,刪除操作,但是是不講查詢和排序的,查詢和排序怎么辦,查詢和排序放到最后,查詢和排序來講,這個大家就明白了,中間還夾了一章叫遞歸,為什么把遞歸放到這里呢,告訴大家在第四章講了遞歸之后,第五章,第六章,第七章,第八章每一種都會用到遞歸,你會發現使用遞歸來編碼的話,代碼上非常的簡單,思路上也是非常的簡單,當然他也有他的一個劣勢,遞歸大家要作為一個重點來掌握,有哪些數據結構大家知道了,我們整個數據結構講那些內容,他們什么關系,大家也應該知道了 學習數據結構的四種境界境界1: 聽懂理論,聽懂算法思路,我只管聽,這也算一種境界,理論家,眼高手低,反正總比不知道強多了,思想也是很重要但是光是達到這個境界肯定是不行的境界2: 我們要完成主要數據結構基本算法的實現,大家仔細看看這里面有兩個詞語,主要數據結構,是不是所有的,不是,主要像線性表啊,什么二叉樹啊,查詢排序啊,完成主要數據結構的基本算法,基本算法的實現,這算是境界2,有理論也有了實踐了,我們數據結構到這個層次算是入門了境界3: 我對這個數據結構非常感興趣,我立志要在這方面做更多的研究,下一步可以完成更多的數據結構和更多算法的實現進一步提高數據結構的功底,我們現在開發的JAVAEE的項目,一般是用不到數據結構,因為它相當于是二次開發,人家在JAVAEE的基礎上,并且MVC的模式我們都采用,這個情況下我們就實現他的業務就可以了,我們開發JAVAEE的項目也開發了這么多,也沒有用到數據結構,這和我們開發JAVAEE的項目有關系,但是如果開發一些更底層的項目的話,哪怕你開發一個游戲的話,你會發現對于數據結構的要求就一下子提高了,我們可以完成更多數據結構更多算法的實現,學習數據結構的話你的編程水平是會快速提高的,你寫一個項目兩個項目也許只是業務不一樣,到最后你會發現你的編碼水平也沒有多大的提高,事實上你開發4,5個項目之后你都可以照樣開發,我們學些數據結構是可以學到很多,更多更復雜的一些算法,就可以直接提高我們的編碼水平的境界4: 境界4什么意思,你只要把數據結構學好,光拿著這一本數摳,你是絕對摳不好的,還得和實踐結合,還得融會貫通,舉一反三在實際的開發中來應用他,跟實際相結合,這樣一來才會把數據結構用好,用的更活,這就是我們學習數據結構的4中境界,對于大家來說,我們對于初學者來說,我們要求大家達到境界2吧,聽懂理論,完成主要數據結構的基本實現,數據結構入門了如果大家對數據結構感興趣,或者你以后的工作中遇到相關的問題,我們可以做更多的深入的研究,回答了這么三個問題,

那么我們下面就從第一章開始了,基本概念,1. 數據2. 數據項3. 數據元素4. 數據對象 感覺這些概念好難啊,這個概念我們記錄,紅色的是一個學生的一個信息,這個姓名音樂分數,這個單位還能夠再小嗎,這就不能再小了,音樂68分你再怎么分,然后紅色叫做數據項,具有原子性,不能再分了,最小數據單位,很容易理解,那一條學生的信息,小明的,這一行叫什么,數據結構里面叫做數據的元素,稱之為數據元素,它是數據的基本單位,他不是最小單位,通常是由若干個數據項組成的,在計算機程序中一般作為一個整體來進行處理,這是一個學生的對象,很多學生的信息我們稱之為數據對象,數據元素就是一個學生性質相同的,多個學生在一起的集合就叫做數據對象,它是數據子集,它是數據的一部分,什么叫數據項,什么叫數據元素,什么叫數據對象,但是這三個都是數據,概念放在這里大家可以自己去讀,不管是數值,字符,字符串,還是什么聲音,圖像,視頻,都可以稱之為數據,這幾個基本的概念建立我們共同的語言下面我們來看數據結構什么叫數據結構呢?從字面上理解,如果我們要從這4個字里面找兩個主語的話,應該是結構,是數據的結構,不是建筑的結構,也不是人體的結構,是數據的結構,那不僅僅有數據,關鍵是數據以什么樣的形式組織在一起,各種數據之間的關系是什么,這叫數據結構,那這都是人這些人都是有結構的,這是人和人都是一個一個的數據,他們是以一種什么樣的結構來組織的,他們是以隊列,以線的形式來組織的,比如中間的一個人,前面只有一個緊挨著他,后面也只有一個,這人和人之間就是一條線,他們是有結構的,但同樣是人,比如公司的人,有董事長,有總經理,有部門經理,還有各個人員,他們之間又是什么結構啊,如果你從上下結構來說,他們就是上下級的關系,這也是一種結構,就像一顆倒掛的樹,在隊列里面,線性里面,一對一的關系,一條線就可以把它們串在一起,董事會部門來說就是一個樹狀的,一對多的結構,這個大家明確了,什么叫數據結構,同樣是人,我們可以按照不同的方式來排列,組成不同的數據結構,關于數據結構我們要講兩種結構,一種叫邏輯結構,一種叫存儲結構,什么叫邏輯結構,邏輯結構就是存在我們邏輯思維中的,我們抽象出來的一種結構,跟實現無關,一種是數據結構的邏輯層面,這種邏輯結構我們要在計算機里來表示的話,來落地的話,他應該怎么來表示,那就是數據的存儲結構所以數據結構 = 邏輯結構 + 存儲結構當然只有這個結構還是不夠的,還要有各種存儲結構下,各種操作啊,各種運算啊,應該怎么來實現,那這樣就構成了數據結構的全部,數據結構就是講這些的

這張圖你就知道數據結構要講什么了,邏輯結構有哪些,存儲結構有哪些,運算有哪些,查詢,排序,刪除,修改對于每一種數據結構,我隨便拿一個,我們講他的邏輯結構,將他的存儲結構,講他的各種運算,再拿一個數,我們講他的邏輯結構,存儲結構,還有運算,這張圖和上面一張圖是類似的,邏輯結構,存儲結構,還有數據的各種運算,包括這么三大塊,關于基本概念我們就講到這里了,有哪些數據結構呢,講了什么叫邏輯結構,什么叫存儲結構,下面我們重點研究兩個概念,什么叫邏輯結構,什么叫存儲結構,先看邏輯結構唄,邏輯結構和實現無關,不要考慮在計算機里面怎么實現,抽象他們的邏輯關系就可以了我們比出兩種分類方法,第一種叫線性結構,第二種叫非線性結構這是第一種分類的,什么叫線性結構呢,我們在這里舉了兩個例子,這是一個冰糖葫蘆,他就是一個線性結構,而站的一條隊伍,也是一個線性結構,那什么不是線性結構呢,你家的族譜不是線性結構,這就不是線性的,再來一個,北京的地鐵圖也不是線性的,給出這四張圖之后大家對于線性和非線性有了一個初步的認識,那么我們怎么給出一個更加精確的定義呢,請問什么叫線性結構,線性結構可能是冰糖葫蘆,可能是人排隊,但是我們要把它抽象出來,他們有一個共同的特點是什么啊,就是這樣的一個特點,從生活中一個一個的結構抽象成這樣一個邏輯表現形式,一個一個的黑點代表一個一個的節點,每個節點代表一個冰糖葫蘆,也可能代表一個人,都是有可能的,抽象的結構就是這么一條線,這叫線性結構1. 必須有唯一的一個"第一個元素",這里面必須有第一個,假如我們01表示第一個,第一個只有一個2. 有唯一的一個,誰是最后一個,04它是最后一個元素3. 然后除了最后一個元素之外,其他的元素均有唯一的"后繼",比如1后面是3,3后面是5,5后面是2,2后面是4,4后面就沒有了除了最后一個元素以外,其他的元素都有唯一的后繼4. 除了第一個元素之外, 其他的元素都有唯一的前驅,4的前一個是2,2的前一個是5,5的前一個是3,3的前一個是1,1的前面就沒有了,如果滿足這四個要求的話,他就是一個線性結構,這樣我們就是一條線,還用說嗎,難道還有多個前驅和多個后繼嗎,那當然有了,1有02和03,這就不是1對1了,所以線性結構他表示的是什么關系,是一對一的關系,什么叫線性結構我們知道了,有這種抽象的認識

相對于線性結構,非線性結構的邏輯特征是一個節點元素可能對應多個直接前驅和多個直接后驅,比如說對于這種結構來說,這是一顆樹,這是一個圖,這個邏輯結構是從哪里來的,他就從我們實際生活中來的,這是一個族譜,從八代祖宗開始,一直到當前這個,這是一個由上而下倒掛的樹,生活中還有沒有這樣的例子,一個部門的組織架構,從上級到下級,還有一個計算機的文件系統,它畫的是linux的文件系統,window里每個盤都有自己的根目錄,這都是一種結構,我們可以從抽象出共同的特點,特點就是一個樹狀的結構,他是一種一對多的關系,1可以有多個孩子,1可以有多個后繼,多個下級節點,2也可以有多個下級節點,但是任何的節點想找他的前驅的話,或者找他的上一級的話,只有一個,這就叫樹,還有沒有別的,中國的鐵路圖,各個城市的地方可能會交匯,交通樞紐的地方北京的地鐵圖換乘站,很明白多個地鐵線交叉的地方,那么他們又有什么共同的特點,最終抽象出一張圖出來,網狀的結構,或者叫圖,或者叫網,就是這種關系,比如這個2,他的后繼可能是4,可能是3,他的前驅可能有1,也可能有3,按照這個箭頭來,多個先驅多個后繼,但在這里它會有什么關系,多對多的關系,關于邏輯結構我已經講了再次說一下線性結構,非線性結構有樹狀結構和圖狀結構,或者網狀結構,這三種結構我們都說了,還是來自于實踐的,從實踐中總結出來的,這是一張北京的線路圖分類2: 同樣是邏輯結構,我們可以分成集合結構,線性結構,樹狀結構,網狀結構/或者叫網絡結構與剛才的分類有什么區別,這個就更細了,線性結構還是有的,他把非線性結構給你分出兩個來,一個叫樹狀結構,一個叫網狀結構,然后又給你加了一個集合結構,一共有4個,那其中最常用的是線性結構和樹狀結構,高德地圖肯定離不了圖,可能在某些特定問題里面會專門用到這個圖,很多問題里面可能用不到圖1. 什么叫線性結構: 一對一的關系2. 什么叫樹狀結構: 就是一對多的關系3. 什么叫網狀結構: 多對多的關系4. 什么叫集合結構: 節點之間沒有一對一,也沒有一對多,也沒有多對多,他們只是屬于這一種集合,各個節點之間沒有其它任何的關系,這種情況我們就稱之為集合,集合就是我們數學里面講的集合,但是元素之間是沒有關系的,那我們在數據結構里面不對集合進行研究,因為集合中的元素關系比較弱,也沒有多大可以研究的,那么我們記錄一點就可以了,集合的元素有三個特征,唯一的,無序的,確定的,我一聽到這三個名字好熟悉,我們學過HashSet,他就是無序的,唯一的,肯定也是確定的,他們就沒有前驅和后繼,一對一的關系了,也沒有上下級的關系了,這是第二種分類方式,我們再往下看1個班的學生它是什么邏輯結構呢?像我們班的學生是一個集合的,還是線性的,還是樹狀的,還是網狀的,我覺得要看在什么場合下來說,比如說我們班的學生剛剛來到我們學校的時候,那可能就是一個集合的,一直到我們畢業一直都是一個集合的,肯定是作為一個集合來存在的,但是如果再往下再來走,換一個角度來說,當我們對每個學生排了學號之后,是不是有先后順序了,或者我們下課了我們打飯去了或者我們要排著隊列做其他事情去了,那我們就變成了一種線性結構,我們交作業的時候就變成了樹狀結構了,組員對組長,組長對班長,這個就是上下級的關系了,那這個時候就體現了樹狀的這種,那什么叫網狀結構啊,我們按照座位來做好的話,你前后左右可能都有人,這就是一種網狀的結構,或者我們同學這種關系,你和他熟,他和她熟,那這也就變成了一種關系網了,他也是一種網狀結構

什么叫存儲結構同樣是一個線性結構,同樣是這么一條線,表示方式是不一樣的,怎么來表示呢,存儲結構一共有4種,順序結構,鏈式結構,索引結構,和散列結構,一共有這么4中存儲方式,當然對索引和散列呢,我們在這里簡單的提一下,后面會做專門的說明,而順序和鏈式結構呢,就貫穿于我們每種數據結構的講解,1. 順序存儲結構: 順序存儲結構大家太熟悉了,就像我們JAVA里面學的數組,一下在內存里面分配連續的空間,數據一個一個挨著一個就可以了,不需要專門的存儲地址,他們是相鄰的,他們的位置之間也隱藏了他們之間的先后關系,他這是一個順序存儲結構,這個大家明白的,但是順序存儲結構有沒有缺點,有缺點,比如這是一個隊列,來個人,大哥我又急事,你能不能讓我插個隊啊,我想插到3號的前面,可以不可以,3號很大方,你來到我前面就行了不是這么簡單的,后面那個人不讓的話他能插到前面嗎,不可以,所以你想讓這個人加到3號的前面,那就是3號包括后面所有的內容,都往后移動一個位置,然后空出一個位置,他才可以過來,所以對順序存儲結構來說呢,它是有缺點的,這種插入和刪除的時候,效率是比較低下的,這個大家應該都是比較熟悉了2. 鏈式存儲結構: 順序的是分佩連續的空間,鏈式的就不一樣了,他就分配了單獨的空間,每塊空間有沒有連在一起呢,沒有,是不連續的,但是這么一來的話,當你這個值存放a1之后,我怎么找到a2,地址是沒有規律的,必須在存放a1的這個位置,同時存放一個指針,指向a2在哪里存,所以這個節點要存兩個數據,第一部分要存數據a1,第二部分要存地址值,地址是下一個節點的地址,根據這個地址可以找到下個節點,這就是鏈式型的結構,那你覺得鏈式結構是節省空間還是浪費空間,從這個角度來說他不僅存數據,是不是還要存地址,他要多占一些空間,從這個角度來說它是要浪費空間,但是也不見得,因為鏈式結構有幾個數據就有幾個節點,我有10個數據,有10個節點就夠了,我需要20個節點嗎,我不需要,10個就夠了,但是這個數組就不確定了,數組你必須首先指定總的長度,你一下子指定100個,結果你里面只存了3條數據,那97個都是浪費的,都是空閑的,所以到底哪一個浪費空間我們要從不同的角度來說,這就是我們將的鏈式存儲結構,我們為什么要用鏈式的存儲結構,是不是內存里面沒有一塊這么長的連續的空間,所以我才采用鏈式的,不是的,采用鏈式并不是內存中沒有連續的,只有單個的,所以才采用鏈式的,不是的,最主要采用鏈式的是有他的優點,有什么優點,你想插入,你想刪除,只要給一下指針就可以了,并且鏈式的你有幾個數據,就幾個節點,不需要空閑的節點,它是有他的優點,這是他的一個鏈式存儲結構,后面的每種都會給出兩種實現,一個是順序的實現,一個是鏈式的實現3. 索引的存儲結構: 生活中這樣的例子也很多,比如我們看一本書的話,他前面是有目錄的,目錄的目的是什么,是為了我們快速的找到后面的內容,找到這個數據,那目錄占不占空間,目錄肯定是占空間的,他一方面占的空間非常的小,另一方面占這么小的空間可以帶來性能極大的提升,所以占這點空間是值得的,再比如字典里的目錄,部首檢字法,拼音檢字法,雖然也是占空間的,但是是值得的,我們看這幅圖這個圖分兩塊,右邊的就放一條一條的數據,左邊這一塊呢,放的是索引,索引可以分好幾級,是為了快速的找到,因為如果你只有一級索引的話,一級索引可能又變成了順序查找了,他可以分成好幾級,進行范圍的跳躍,這是我們講的索引的存儲結構,索引存儲結構是有他特殊的情景場合的,海量數據的話索引是比不可少的,數據庫里面索引就是一個必不可少的內容4. 散列存儲結構: Hash表,它是一種神奇的結構,添加和查詢的速度快,非常快的就可以找到,他的添加查詢可以說是最快的,快到什么程度,就好比我們數組中按照索引查詢元素一樣,數組我們已經講過了,數組中找第一個元素,第100個元素,第10000個元素,花的時間是一樣的,一次到位,只要做一次計算這多快啊,散列的存儲結構不是按照索引來找的,它是按照內容來找的,他也可以達到數組按照索引查找的效果,看他是怎么神奇的,他有各種各樣的結構,主體結構采用數組,每個數組可以引出一個相關的鏈表,這是哈希表最常見的一種方式,存儲結構我們也講了4種結構,邏輯結構有線性結構和非線性結構,集合結構我們不對其進行研究,線性結構,網狀結構,樹狀結構存儲結構有4種,一個是順序的,一個是鏈式的邏輯結構和存儲結構之間有什么關系呢,比如說這是一個線性的邏輯結構,當一對一的這種連接關系我們在計算機里面表示的話我們該如何表示你可以用數組來表示吧,數組里面可以表示一個一個的節點,那不就是順序表嗎,還可以用鏈表來表示嗎,同樣表示這張圖,我們有兩種實現方式,他們各有優缺點數據結構有邏輯結構,邏輯結構有線性結構和非線性結構,非線性結構有樹結構和圖結構存儲結構或物理結構有4個:我們講的最多的是順序結構和鏈式結構,每種數據結構我們會講他的運算,插入,刪除,修改,查找,排序,還有其他的,特別強調邏輯結構是唯一的,存儲結構不唯一運算是針對誰的,運算永遠是依賴于存儲結構的,我們在數組里面怎么做增加,我們在鏈表里面怎么做增加,這個運算的實現肯定是依賴于存儲結構

?

總結

以上是生活随笔為你收集整理的数据结构入门(一级)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。