學習資料結構與演算法課程有用嗎,資料結構和演算法有什麼關係?資料結構就是演算法嗎?

2021-03-27 08:41:32 字數 5036 閱讀 9951

1樓:碼寶寶呀

在電腦科學中,資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件(資料元素)以及它們之間的關係和運算等的學科.

它屬於計算機的核心基礎課程,不僅僅計算機專業開這門課程,電子類的幾乎都開,學數學的也有這門課。計算機過級不考這個的,但他是計算機專業考研的必考科目,是搞程式、軟體開發的人員必須精通的一門課程之一。

資料結構與演算法更是各大名企面試題中的常客,如果不想被行業拋棄、想進入更大的名企、在it道路上走得更遠,掌握資料結構與演算法是非常有必要的。

這是很明顯的乙個道理,沒有地基就沒有高樓,沒有原理更遑論創新。所有我最近在看小碼哥李明杰的系列戀上資料結構與演算法的課程,感覺有幫助很大。

學習資料結構,就是為了打好這樣乙個基石,你的**將不僅僅是止步於此,而是會因為資料結構帶給你的知識,讓你想到更好的方法,碼出執行更快的、編寫更方便的**來。資料結構就像乙個工具,你可以根據需求將這個工具用到合適的場景。當基本的工具不能滿足你的需求,資料結構大佬就開始自定義資料結構,乙個程式就這樣被「玩兒」出了花。

2樓:匿名使用者

作為軟體開發人員都知道資料結構與演算法的重要性,人人都想攻克它,但大多數都中途放棄了。可能是因為知識點太多、不知從何開始學起,也可能是沒找對學習方法,也可能是沒找到好的學習資料。

那麼,學完本課程就是你徹底掌握資料結構與演算法的美好開始。

3樓:局用戰止

首先,這兩門課程對於程式設計而言是非常重要的,但由於大學課程安排的不合理性以及學生自身的程式設計差異,對於未深入研究過程式設計的人或者未參與過專案開發的人而言,課程缺乏足夠的吸引力。通俗而粗略的講資料結構可提高程式本身的健壯性以及靈活性,無關任何程式語言;作業系統有助於你開發基於作業系統的各類應用,要知道絕大多數的程式都是基於作業系統的,再者類似記憶體分配、儲存空間的分配等細節也因作業系統不同而不同。我個人感覺是,這兩門課程對於大多數學生而言是缺乏實際意義的,但如果你從事過一段程式設計工作後再返回學習兩門課程會有更深入的體會。

希望我的回答可以幫助到你。

資料結構和演算法有什麼關係?資料結構就是演算法嗎?

4樓:安徽新華電腦專修學院

它們來可以相互區別

也可以相互自統一。廣義上講,演算法是某一系列運算步 驟,它表達解決某一類計算問題的一般方法,對這類方法的任何乙個輸入,它可以按步驟一步一步計算,最終產生乙個輸出。但是對於所有的計算問題,都離不開要 計算的物件或者要處理的資訊,而如何高效的把它們組織起來,就是資料結構關心的問題,所以演算法是離不開資料結構的。

學資料結構和演算法之前要先學什麼?

5樓:匿名使用者

學習演算法和資料結構就是把你的程式執行速度變得更快,記憶體需求變得更小,**長度變得更短。正式進入資料結構和演算法前需要了解下c++記憶體的那些事。

在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限;

堆,就是那些由new分配的記憶體塊,它們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**;

自由儲存區,就是那些由malloc等分配的記憶體塊,它和堆是十分相似的,不過它是用free來結束自己的生命的;

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區;

常量儲存區,這是一塊比較特殊的儲存區,它們裡面存放的是常量,不允許修改。

以上內容摘自《c++記憶體管理技術內幕》,學習資料結構和演算法前可以多多看一下。

學資料結構有什麼用?

6樓:

在許多態別的程式的設計中,資料結構的選擇是乙個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴於是否選擇了最優的資料結構。

許多時候,確定了資料結構後,演算法就容易得到了。有些時候事情也會反過來,我們根據特定演算法來選擇資料結構與之適應。不論哪種情況,選擇合適的資料結構都是非常重要的。

選擇了資料結構,演算法也隨之確定,是資料而不是演算法是系統構造的關鍵因素。這種洞見導致了許多種軟體設計方法和程式語言的出現,物件導向的程式語言就是其中之一。

請問大學學習資料結構與演算法(c語言版)需要多強的c語言基礎?

資料結構學的到底是什麼,和演算法的關係

7樓:百度使用者

本人乃乙個資料痴迷

者,在計算機的道路上,也是乙個資料結構的痴迷者,現在大學裡面和同學搞開發也痴迷於資料庫,我就我個人的理解給你談一談:

首先,資料結構是一門計算機語言學的基礎學科,它不屬於任何一門語言,其體現的是幾乎所有標準語言的演算法的思想。

上面的概念有一些模糊,我們現在來具體說一說,相信你門的資料結構使用的是一門具體的語言比如c/c++語言來說明,那是為了輔助的學習資料結構,而資料結構本身不屬於任何語言(相信你把書上的程式敲到電腦裡面是不能通過的吧,其只是描述了過程,要除錯程式,還需要修改和增加一些東西)。你們的書上開始應該在講究資料的物理儲存結構/邏輯儲存結構等概念,說明資料結構首先就是「資料的結構」,在記憶體上的儲存方式,就是物理的儲存結構,在程式使用人員的思想上它是邏輯的,比如:

你們在c/c++中學習到鍊錶,那麼鍊錶是什麼乙個概念,你們使用指標制向下乙個結點的首位址,讓他們串聯起來,形成乙個接乙個的結點,就像顯示生活中的火車一樣。而這只是對於程式設計師的概念,但是在記憶體中儲存的方式是怎樣的那?對於你程式設計師來說這是「透明」的,其內部分配空間在那裡,都是隨機的,而記憶體中也沒有乙個又一根的線將他們串聯起來,所以,這是乙個物理與邏輯的概念,對於我們程式設計師只需要知道這些就可以了,而我們主要要研究的是「邏輯結構」。

我可以給你乙個我自己總結的乙個概念:所有的演算法必須基於資料結構生存。也就是說,我們對於任何演算法的編寫,必須依賴乙個已經存在的資料結構來對它進行操作,資料結構成為演算法的操作物件,這也是為什麼演算法和資料結構兩門分類不分家的概念,演算法在沒有資料結構的情況下,沒有任何存在的意義;而資料結構沒有演算法就等於是乙個屍體而沒有靈魂。

估計這個對於演算法的初學者可能有點暈,我們在具體的說一些東西吧:

我們在資料結構中最簡單的是什麼:我個人把書籍中線性表更加細化一層(這裡是為了便於理解在這樣說的):單個元素,比如:

int i;這個i就是乙個資料結構,它是乙個什麼樣的資料結構,就是乙個型別為int的變數,我們可以對它進行加法/減法/乘法/除法/自加等等一系列操作,當然對於單個元素我們對它的資料結構和演算法的研究沒有什麼意義,因為它本來就是原子的,某些具體運算上可能演算法存在比較小的差異;而提公升乙個層次:就是我們的線性表(一般包含有:順序表/鍊錶)那麼我們研究這樣兩種資料結構主要就是要研究它的什麼東西那?

一般我們主要研究他們以結構為單位(就是結點)的增加/刪除/修改/檢索(查詢)四個操作(為什麼有這樣的操作,我在下面說到),我們一般把「增加/刪除/修改」都把它稱為更新,對於乙個結點,若要進行更新一類的操作比如:刪除,對於順序表來說是使用下標訪問方式,那麼我們在刪除了乙個元素後需要將這個元素後的所有元素後的所有元素全部向前移動,這個時間是對於越長的順序表,時間越長的,而對於鍊錶,沒有順序的概念,其刪除元素只需要將前乙個結點的指標指向被刪除點的下乙個結點,將空間使用free()函式進行釋放,還原給作業系統。當執行檢索操作的時候,由於順序表直接使用下標進行隨機訪問,而鍊錶需要從頭開始訪問一一匹配才可以得到使用的元素,這個時間也是和鍊錶的結點個數成正比的。

所以我們每一種資料結構對於不同的演算法會產生不同的效果,各自沒有絕對的好,也沒有絕對的不好,他們都有自己的應用價值和方式;這樣我們就可以在實際的專案開發中,對於內部的演算法時間和空間以及專案所能提供的硬體能力進行綜合評估,以讓自己的演算法能夠更加好。

(在這裡只提到了基於資料結構的乙個方面就是:速度,其實演算法的要素還應該包括:穩定性、健壯性、正確性、有窮性、可理解性、有輸入和輸出等等)

為什麼要以結點方式進行這些亂七八糟的操作那?首先明確乙個概念就是:對於過程化程式語言所提供的都是一些基礎第一資訊,比如一些關鍵字/保留字/運算子/分界符。

而我們需要用程式解決現實生活中的問題,比如我們要程式記錄某公司人員的情況變化,那麼人員這個資料型別,在程式語言中是沒有的,那麼我們需要對人員的內部資訊定義(不可能完全,只是我們需要那些就定義那些),比如:年齡/性別/姓名/出生日期/民族/工作單位/職稱/職務/工資狀態等,那麼就可以用一些c/c++語言描述了,如年齡我們就可以進行如下定義:

int age;/*age變數,表示人員公司人員的年齡*/

同理進行其他的定義,我們用結構體或類把他們封裝成自定義資料型別或類的形式,這樣用他們定義的就是乙個人的物件的了,它內部包含了很多的模板資料了。

我就我個人的經歷估計的**量應該10000以內的(我個人的經理:只是建議,從你的第一行**開始算,不論程式正確與否,不論那一門語言,作為乙個標準程式設計師需要十萬行的**的功底(這個是我在大學二年級感覺有一定時候的大致資料,不一定適合其他人),而十萬行**功底一般需要四門基礎遠支撐,若老師沒有教,可以自學一些語言)。

8樓:匿名使用者

所有的演算法,乃至數學在實際運用中都是要根據不同的資料來選擇不同的方法,所以一般學習過演算法和資料結構的人都會越發的認識到,資料才是程式的中心,只有找到了乙個組織資料的最佳方式,演算法的運用才會事半功倍。

一般來說我覺得先學演算法比較好,但演算法和資料結構都是相輔相成的,要學好演算法要有一定資料結構的基礎,要學資料結構亦要有演算法基礎。但演算法比資料結構更重要一些,因為沒有演算法只有資料結構是沒用的。

資料結構是在整個電腦科學與技術領域上廣泛被使用的術語。它用來反映乙個資料的內部構成,即乙個資料由那些成分資料構成,以什麼方式構成,呈什麼結構。

從計算機的角度講,程式是用一種計算機能理解並執行的計算機語言描述解決問題的方法步驟。程式設計:是分析解決問題的方法步驟,並將其記錄下來的過程。演算法:解決問題的方法步驟。

1.資料結構或者演算法之類不是直接執行的東西。 資料結構,大約就是關於怎樣使用變數能更有效率的理論。

 演算法麼,比較象數學公式,不過代進去的不是資料或變數,而是c的語句。是關於怎樣安排程式才能事半功倍的理論。

資料結構演算法的時間複雜度資料結構與演算法,請問時間複雜度是怎麼判定的?

按照分析慣例,假設所有單一運算的時間複雜度均為1 x n 1 while x y 1 y 1 4 兩次加法 1次乘法 1次比較 y y 1 1 時間複雜度 1 4 1 x 迴圈次數 迴圈次數是由n和y的初始值決定的,假設迴圈次數為n,y的初始值為y0,y的結束狀態為yn,有 x yn 1 yn 1 ...

學習「資料結構與演算法」需要哪些數學基礎

你好,資料結構不需要數學基礎,要的是基本的理解能力和 能力,還有就是多思考,資料結構很簡單的。學軟體開發需要學習什麼知識?資料結構和演算法與數學有關係嗎?軟體開發需要學習一門組合語言,演算法等於是軟體的原理,和數學有一定的關係。你做軟體的,首先要知道軟體是什麼原理來實現這個功能的,連自己都不知道原理...

資料結構是什麼舉個例子,學習資料結構和演算法在什麼地方運用,一直不解求舉個例子

資料bai結構是在整個計算機du 科學與技術領zhi 域上廣泛被使用 dao的術語。它用來反映一版 個資料的內部構成權,即乙個數 據由那些成分資料構成,以什麼方式構成,呈什麼結構。資料結構有邏輯上的資料結構和物理上的資料結構之分。邏輯上的資料結構反映成分資料之間的邏輯關係,而物理上的資料結構反映成分...