數(shù)據(jù)結(jié)構(gòu)必背算法 為什么剛?cè)腴T的程序員沒有感覺到算法和數(shù)據(jù)結(jié)構(gòu)的重要性?
為什么剛?cè)腴T的程序員沒有感覺到算法和數(shù)據(jù)結(jié)構(gòu)的重要性?關(guān)于這個問題,首先,我非常遺憾地告訴你兩點。首先,能夠問這個問題意味著你不是一個程序員。只能說你才剛剛開始學習編程(即使你有一份編程工作,你也不能
為什么剛?cè)腴T的程序員沒有感覺到算法和數(shù)據(jù)結(jié)構(gòu)的重要性?
關(guān)于這個問題,首先,我非常遺憾地告訴你兩點。
首先,能夠問這個問題意味著你不是一個程序員。只能說你才剛剛開始學習編程(即使你有一份編程工作,你也不能改變這一點)。就像說一個剛學了三個月吉他的人不能稱自己為吉他手(但他可以說是吉他手或吉他手)。
其次,我很抱歉地告訴你,你還沒有開始。入門的先決條件之一是理解程序?qū)嶋H上是一個算法數(shù)據(jù)結(jié)構(gòu)。所以你說你是一個入門級程序員,但你不覺得算法和數(shù)據(jù)結(jié)構(gòu)的重要性。那么我想問一下,除了算法和數(shù)據(jù)結(jié)構(gòu)之外,程序中還有什么重要的東西。
不理解狹義的算法,認為算法是排序算法、搜索算法,認為數(shù)據(jù)結(jié)構(gòu)是數(shù)組、鏈表、哈希表、圖形等。這些都是經(jīng)典的算法和數(shù)據(jù)結(jié)構(gòu)。
你寫的程序,不能有任何這些經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法,那么,你的程序沒有算法和數(shù)據(jù)結(jié)構(gòu)嗎?你的程序必須解決一個問題或做些什么。這些東西,你首先需要在計算機世界建立一個模型,這個模型就是數(shù)據(jù)結(jié)構(gòu)?;谶@些數(shù)據(jù),您的程序需要執(zhí)行一些指令,這些指令是作為一個整體的算法。因此,program=algorithm數(shù)據(jù)結(jié)構(gòu)就是在這個廣義上說的。
正是因為“程序=算法數(shù)據(jù)結(jié)構(gòu)”,所以沒有了算法和數(shù)據(jù)結(jié)構(gòu),程序中就沒有殘留。至于算法和數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系,我不在這里討論。總之,沒有數(shù)據(jù),算法就沒有對象和基礎。數(shù)據(jù)結(jié)構(gòu)的設計和合理性將影響算法的性能。
為什么你感覺不到?答案是我答案開頭的兩點。我說的話似乎有點殘忍,但實際上沒什么。繼續(xù)學習。
程序員需要終身學習。
數(shù)據(jù)結(jié)構(gòu)和算法,哪個好?
他們都很好。它們有不同的特點。他們不怕可比性。
是不是每一門編程語言都有自己特定的數(shù)據(jù)結(jié)構(gòu)和算法?你怎么看?
對于數(shù)據(jù)結(jié)構(gòu)和算法,它們是抽象的,不受特定語言的約束。換句話說,數(shù)據(jù)結(jié)構(gòu)和算法可以理解為數(shù)據(jù)域。因此,幾乎所有語言都支持相同的數(shù)據(jù)結(jié)構(gòu)和算法。
例如,通用數(shù)據(jù)結(jié)構(gòu),如數(shù)組、鏈表、堆棧、隊列和樹,可以用每種語言實現(xiàn),但實現(xiàn)細節(jié)可能不同。以鏈表為例,在C語言中通常是以指針的形式實現(xiàn)的,而Python中沒有指針的概念,但是可以用其他的方式實現(xiàn)。
算法與語言無關(guān)。算法只是一些數(shù)據(jù)處理邏輯,所以它可以用任何語言實現(xiàn)。如果語言不能實現(xiàn)某些邏輯,那么顯然就有問題了。
一般來說,數(shù)據(jù)結(jié)構(gòu)和算法與語言無關(guān)。但是,除了數(shù)據(jù)結(jié)構(gòu)外,還存在數(shù)據(jù)類型的概念,如整數(shù)、字符、浮點等。這些內(nèi)容在不同語言中的實現(xiàn)可能不同。