-
1 # 海綿鵬娛樂
-
2 # 北航秦曾昌
程式 = 資料結構 + 演算法。
資料結構和演算法是一名程式猿所要具備的基本功,其內容涉及從入門、基礎、進階、高階不同階段,這份功力絕非一朝一夕就能練就的,需要常年累月地在實踐和工程中主動學習和積累。
這裡我們舉一個例子來說明資料結構和演算法的地位:
我們把最終寫好的程式比作兵戈鐵馬的戰場,程式猿是統帥,程式碼是士兵和武器,則資料結構和演算法就相當於兵法。
戰場作戰的時候,你可以不講兵法,純靠肉搏,這樣你可能取得勝利,也可能會失敗。即使取得了勝利,也可能付出慘痛的代價。這個道理在寫程式的時候亦然,你可能不瞭解資料結構或者演算法,你也能得到你想要的結構,但是你對程式執行的效率、記憶體的開銷沒有掌控,導致程式的效能很不好。或者面對一些複雜的問題,你根本不知道從何下手,借用別人的程式碼暫時解決了問題,但是一旦想自己在新增新功能時,卻又不知怎麼修改。
在戰場上,如果你心有兵法,你能臨危不亂,處事不驚。在程式中,如果你心有資料結構和演算法,你能明察秋毫、遊刃有餘。
演算法和資料結構缺一不可、相輔相成。演算法指的是解決問題的方法和思想,它是獨立存在的,不依託於任何程式的,同一個思想你可以用不同的語言去實現(比如C語言、C++語言、python語言); 資料結構就是你利用資料完成演算法的載體,資料元素之間不是獨立存在的,是有特定關係的,這些關係就是所謂的資料結構,不同程式語言有相似的基礎資料結構,也有其特定的資料結構,程式猿也可以根據自己的需求定義有針對性的資料結構。
總之,資料結構和演算法是程式的左、右手,學程式設計學的就是結構和演算法,其重要程度可想而知。
-
3 # 加米穀大資料
簡單地說,資料結構是以某種特定的佈局方式儲存資料的容器。這種“佈局方式”決定了資料結構對於某些操作是高效的,而對於其他操作則是低效的。首先我們需要理解各種資料結構,才能在處理實際問題時選取最合適的資料結構。
資料是計算機科學當中最關鍵的實體,而資料結構則可以將資料以某種組織形式儲存,因此,資料結構的價值不言而喻。
相關:
應對程式設計師面試,你應該知曉的八大資料結構
https://www.toutiao.com/i6591714993794712068/
大資料:資料結構與演算法精選面試題
https://www.toutiao.com/i6611280665902055944/
-
4 # 一個存在感小透明
程式設計師的作品就是有資料結構和演算法做基礎構建出來的。
作為程式設計師,可能有JAVA開發工程師,PHP工程師,C語言工程之分,但是你仔細回想,上學期間可並沒有專門的必修課去講述如何學習JAVA,PHP,而資料機構和演算法課卻是必修且學分非常高的課程。
我們足以從國家為計算機相關學生制定的這份學習計劃中看出,資料結構與演算法作為基礎能夠支撐上層不同種類的程式語言,即任你上層語言或者領域如何變化,只要根基打牢了,就能夠構建出一個堅實的專案。不管是平臺開發,人工智慧,還是影象分析處理,都離不開資料結構。
資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。如果把程式看做一個人,那麼資料結構就是人的骨架,如何設計人的骨架能夠使用最少的元素,但是達到最結實的效果,就是資料結構的工作。
程式設計師工作不是在學校裡寫作業,只要輸入輸出對了就能得分。程式設計師的工作除了要保證輸入輸出正確,還要保證使用最少的資源和最快的時間。如上面所說,一個精心設計的資料結構能夠提高專案的執行效率,從而產出更好的產品。
舉個最簡單的例子,我們都知道經典的資料結構佇列是先進先出,堆疊是先進後出。這二者在不同場景各有其需要,比如要滿足一個排隊的需求,那就需要用佇列;如果要自己用程式寫一個計算器,那就需要用堆疊;假設堆疊這種資料結構從未存在過,你需要寫一個計算器,那你只能用佇列來實現,不僅需要額外的輔助佇列浪費了空間資源,還需要不停的在輔助佇列之間傳遞資料,浪費了時間資源。這就是選擇錯誤的資料結構帶來的麻煩。
因此,對資料結構有一個良好掌握的人在程式設計中通常能夠保證程式碼邏輯的質量,從而進一步保證產品的效率。
-
5 # 極客宇文氏
資料結構幾乎是每個程式設計師都涉獵過的學科,如果一個程式設計師連資料結構都不瞭解,那隻能是個碼農了。
資料結構常常伴隨著另外一個詞,那就是“演算法”,資料結構與演算法常常是軟體工程專業的重要課程。資料結構與演算法相輔相成,學問非常大。
雖然你進了公司寫的是業務程式碼,但是你用到的很多東西都與資料結構有關聯,比如Java語言,你用封裝的集合類,其實你如果點開這些類看原始碼,這些集合類的寫法滿滿的資料結構和演算法的知識。
面試喜歡問資料結構,考驗了面試者很多方面的問題,第一是考驗程式設計基礎,第二是考驗對Java等語言的理解深度,第三是考驗你的邏輯思維。
資料結構屬於各種語言必不可少的東西,無論是Java還是Python都一定包含資料結構。所以資料結構不屬於哪種語言,甚至作業系統底層的很多實現都與資料結構息息相關。比如記憶體的原理可以用資料結構中的棧和佇列來解釋。
回覆列表
陣列(array)
連續的儲存空間,可以透過下標定址。
棧(stack)按照先進後出的原則儲存資料。
佇列(queue)按照先進先出或後進後出的原則儲存資料。
連結串列(linked list)一種非連續非順序的儲存結構。每一個節點儲存下一個節點的地址的指標。
樹(tree)以二叉樹為例,有一個根結點,每個節點有一個左子樹和一個右子樹。
圖(Graph)圖是有窮集合V和邊的集合E組成。
資料結構基本是對應了現實世界中涉及到的各種關係,程式設計師就是為了解決現實中遇到的問題存在的,程式也是資料結構為基礎,演算法為根本來解決問題或者提高效率的。
所以面試時候會考察對資料結構掌握的程度,掌握的越深入說明你解決問題和分析問題的能力相對越強。
有時候面試程式設計師會有筆試部分或上機部分,都是以現實問題為模型來考察資料結構和演算法的應用。