哪些資料結構與演算法需要學習,什麼是資料結構和演算法學演算法還需要去了解資料結構嗎

2021-03-03 20:36:48 字數 4822 閱讀 4144

1樓:手機使用者

2談談面向bai物件,物件就是一種du資料結構zhi

什麼是資料結構和演算法?學演算法還需要去了解資料結構嗎?

2樓:匿名使用者

你這理解不完全正確。

因為資料結構不只是記憶體中資料的排列,它是對資料的一種組織方式,就像圖書館要排書一樣,是為了便於操作,同時它本身也整合了對通用操作:比如查詢、比較等的支援。陣列不是一種資料結構,而是一種資料型別。

一個完整的資料結構包括邏輯結構和儲存結構。通常選擇了資料結構,演算法也隨之確定,是資料而不是演算法是系統構造的關鍵因素。

因此在語言實現上,資料結構通常也會包含與之相對應的演算法集合,這些演算法是指基本演算法:查詢、索引、比較等。

資料結構的邏輯結構和硬體是沒有關係的,而其儲存結構受到計算機硬體系統工作方式的影響,通常這點影響在於資料時順序儲存還是離散儲存。演算法的基礎是資料結構。只有指定明確的資料結構,演算法才能設計完成,脫離資料結構,演算法是無法,也不可能成立的。

因為不需要資料的演算法就不是一個有效的計算機演算法,演算法中任何對資料的組織形式都可以被稱之為資料結構。

2.資料結構在程式設計中的地位是極其重要的,是一個程式實現的基礎中的基礎,在此基礎上才能構建演算法。通常而言,你不瞭解什麼高深的演算法,一樣能完成工作,但是如果你不瞭解基本的資料結構,那麼可以說,你根本就不能完成一個任何有實質性內容的程式。

donald ervin knuth教授在其《計算機程式設計藝術》的第一卷《基本演算法》中花費的絕大部分的篇幅去論述資料結構。由此可見資料結構對演算法的重要性。

3樓:匿名使用者

資料結構可以優化資料的存諸,使得資料存諸能夠更省空間,查詢更高效。

有時候資料結構本身就是一種演算法,比如線段樹,splay樹,堆。

而有一些演算法是要建立在資料結構的基礎之上才能夠更高效的。

對於不同的演算法需要採用合適的資料結構。比如最短路徑演算法,對於希疏圖,我們要用連線表來存連。這樣才不能導至大量的空連。而且連的查詢也更高效。

而對於密圖,我們採用連線矩陣來存諸。

4樓:匿名使用者

你可以這樣理解,資料結構你把它理解成excel裡面的製作一張**的表模,比如你做一張工資表,那麼表模肯定你要考慮每一個資料的意義和它們應該放置於哪個位置。而演算法就是你在**內部資料間的關聯運算,可以是邏輯的也可以是數學的。

因此你製作一張工資表,你肯定要先定結構,然後再定演算法。當然你說只學演算法不學結構照樣能做出結構來,但你考慮更高一個層次,如果你這張工資表只是一個公司幾百份**中的一份,你如果不把它的結構搞得很清楚的表達,你其他**要呼叫這張**的資料就無從做到,而你如果用結構來表示,就很清晰了,這就是結構和演算法的不同。

結構是較為巨集觀的思考方式,演算法是微觀的實現,它們之間密不可分。當然在現在軟體開發工程裡面,系統工程師可以分為做結構和做演算法的,但一般做結構的都是更核心的成員,他們懂演算法,但不用做演算法,他們只要把資料結構模型構造好,工程分拆清晰,讓其他的程式設計師按照他們規劃的結構去做細緻的工作就可以了。

5樓:匿名使用者

資料結構與演算法密不可分。

資料結構注重了資料的組織形式。 資料的一定的組織方式已決定了只適用於某此演算法。

演算法尋求在指定資料結構上的最優解, 也就是最有效率的方法。 為此也有此設計特定的資料結構的, 比如紅黑樹就是被髮明出來的。

好的演算法: 儲存空間效率(資料結構)與時間效率(演算法效能)達到一定的平衡, 而非只突出時間效率。 所以一定要同時考慮這兩個方面才能設計出一個好的演算法。

應用中還要考慮特定的環境, 比如嵌入式, 沒有大的記憶體, 這時有些佔用大量的記憶體的一些演算法就不適用了。

另一種角度: 借用c++中stl的概念,

資料結構: 在c++中定義為容器, 比如:vector(陣列) list(連結串列)。。。

而這些容器對於裝入其中的東西並無限制, 比如使用者可定義裝int, 也可以裝char, 還可以裝string資料。

演算法: 在c++中定義也叫演算法, 比如find, 查詢指定的一個元素, 你可在vector容器中查詢 , 也可用在list容器查詢。 但是在不同的容器中查詢效率是不同的, 這是容器本身決定的。

6樓:匿名使用者

呵呵,這兩個都是要學的。。。不學你怎麼做好程式設計

7樓:碼寶寶呀

資料結構就是「多維度」的模版 + 內部與外部的聯絡。 當您定義好資料結構的時候,一個初始的資料模版就被定義出來,然後這個利用這個模版,您可以生成你想要的資料的模樣。 這些資料內部的值可以內在有各種各樣的聯絡,資料與資料直接也有各種個樣的聯絡。

利用資料內部和外部的聯絡的配合,可以幫助人們抽象各種個樣的問題。 常見的資料結構有連結串列,棧, 佇列,陣列等等。

演算法以我的理解就是解決一個問題時需要的一個流程。通常一個演算法能解決一類相似的問題,只要你的程式按照既定演算法的步驟進行,就可以解決此類問題。對學習演算法,我的建議就是把演算法具體成影象,把幾個關鍵的步驟用影象記憶下來。

資料結構和演算法是相輔相成的。資料結構是為演算法服務的,演算法要建立在特定的資料結構之上,因此無法孤立資料結構來講演算法,也無法孤立演算法來講資料結構。所以學演算法就會涉及到資料結構,同樣學資料結構也必須學到演算法。

想知道更多的資料結構與演算法知識嗎?可以去了解一下小碼哥李明傑。

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

8樓:百度使用者

本人乃一個資料痴迷

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

程式 資料結構 演算法 資料結構是相互之間存在的一種或多種特定關係的資料元素的集合。包括4類基本的結構 集合 線形結構 樹形結構 圖狀或網狀結構。通俗點就是資料的邏輯結構,比方說這些資料在記憶體中以什麼樣的結構存放。演算法實際是程式設計過程中完成一件事採用的方法,比方說現實生活中做數學題時兩個人都將...

什麼是資料結構?什麼是演算法?演算法與程式有什麼關係

資料結構與演算法屬於開發人員的基本內功,也能訓練大腦的思考能力,掌握一次,終生受益。紮實的資料結構與演算法功底,能讓我們站在更高的角度去思考 寫出效能更優的程式,能讓我們更快速地學習上手各種新技術 比如人工智慧 區塊鏈等 也能讓我們敲開更高階程式設計領域的大門。資料結構與演算法更是各大名企面試題中的...

資料結構涉及到哪些數學知識,學習資料結構需要哪些數學知識?

好!我告訴你。我畢業兩年了,都是做c c 開發方面的 首先說一下 回資料結構和vc mfc以及資料結構的答應用,vc mfc主要是開發上位機軟體,即pc機上的軟體的。一般情況下做vc一般開發不需要掌握太多的資料結構知識。開發中不會用太多,瞭解就夠了。資料結構一般常用在嵌入式開發,譬如路由器開發裡常用...