資料結構與演算法學習(一)
資料結構概述
定義:我們如何將現實生活中大量而複雜的問題以特定的資料型別(個體的儲存)和儲存結構(個體關係)儲存到主儲存器(記憶體),以及在此基礎上為實現某個功能(查詢某個元素,刪除某個元素,對所有元素排序等)而執行相應的操作,這個相應的操作,就是演算法。(儲存和操作)
資料結構 = 個體 + 個體關係
演算法 = 對儲存資料的操作
演算法:
解題的方法和步驟
衡量演算法的標準
1、時間複雜度
大概程式要執行的次數,而非執行的時間
2、空間複雜度
演算法執行過程中大概所佔用的最大記憶體
3、難易程度
4、健壯性
資料結構的地位
資料結構是軟體中最核心的課程
程式 = 資料的儲存 + 資料的操作 + 可以被計算機執行的語言
預備知識
指標
指標是c語言的靈魂
地址:記憶體單元的編號,從0開始的非負整數
指標:指標就是地址,地址就只指標
指標變數:儲存記憶體單元地址的變數
指標實質是一個受限操作的非負整數
使用被調函式來修改主調函式中普通變數的值:
實參必須是變數的地址
形參必須是主調變數型別的指標變數
被調函式中,使用*形參變數名的方式來修改主調函式中普通變數的值
結構體
動態記憶體的分配和釋放
相關推薦
資料結構與演算法學習(一)
資料結構概述 定義:我們如何將現實生活中大量而複雜的問題以特定的資料型別(個體的儲存)和儲存結構(個體關係)儲存到主儲存器(記憶體),以及在此基礎上為實現某個功能(查詢某個元素,刪除某個元素,對所有元素排序等)而執行相應的操作,這個相應的操作,就是演算法。(儲存和操作) 資料結構 = 個體
資料結構及演算法學習(一)
一、資料結構範疇 資料結構是一門與程式設計密切相關的課程,而程式設計就是演算法+資料結構,演算法即是處理資料的策略,而資料結構就是表達程式設計的模型,可以說任何一個程式設計問題,我們都可以從演算法和模型出發。概而言之,資料結構就是描述了程式設計的數學模型及在其程式設計上的表示和實現。 二、基本概念
javascript資料結構與演算法筆記(一):棧
javascript資料結構與演算法筆記(一):棧 一:簡介 二:ES6版Stack類(陣列) 三:ES版Stack類私有屬性的封裝 1.偽私有屬性封裝 2.真私有屬性封裝
資料結構與演算法分析(一) —— 數學基礎
這段時間,該開始資料結構與演算法分析的學習了。跟以前一樣,學習同時整理成博文是個不錯的學習方式,因此,後面一段時間將對資料結構與演算法分析進行講解學習,希望有興趣的同學一起討論學習。 資料結構,即組織大量資料的方法;演算法分析,即演算法執行時間的估計。很多
資料結構與演算法python(一)引言
1.程式設計解決的兩個問題:(1)處理實際問題中的各種物件及其相互關係,即對映到python能處理的某種結構(2)實際問題的求解過程對映到一個計算過程,用程式實現該過程2.解決一個實際問題而開發程式的工作氛圍四個階段:(1)分析:弄清楚要求解的問題,給出儘可能嚴格的描述(2)
資料結構與演算法入門(1)
一、資料結構 資料之間相互存在的一種或多種特定的關係的元素的集合。 邏輯結構 資料物件中資料元素之間的相互關係 1.集合結構 在資料結構中,如果不考慮資料元素之間的關係,這種結構稱為集合結構。 各個元素是平等的,共同屬性是屬於同一個集合 2.線性結構 線性結構中的資料元素之間
資料結構與演算法筆記(二)複雜度分析
2. 複雜度分析 2.1 什麼是複雜度分析 資料結構和演算法的本質:快和省,如何讓程式碼執行得更快、更省儲存空間。 演算法複雜度分為時間複雜度和空間複雜度,從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 複雜度描述的是演算法執行時間(或佔用空間)與資料規模的增長關
資料結構與演算法筆記(三)陣列
3.陣列 陣列(Array)是一種線性表資料結構。它是一組連續的記憶體空間,來儲存一組具有相同型別的資料。 3.1 特性 線性表 資料排成像一條線的結構,如陣列、連結串列、佇列、棧等。 與之相對立的是非線性,如二叉樹、堆、圖等,其資料之間並不是簡單的前後關係。
資料結構與演算法筆記(三)反轉部分連結串列
反轉部分連結串列 上次我們搞定了反轉單向連結串列和雙向連結串列的問題,但實際過程中我們可能只要反轉部分連結串列,在這種情況下我們需要對上次寫出的類增加一個叫做reverse_part_linklist的函式,傳入引數為兩個整數from和to,將from到to之間的節點進行反轉
基礎資料結構與演算法實現(2)—二叉搜尋樹BST
import java.util.LinkedList; import java.util.Queue; public class BST <E extends Comparable<E>> { private c
javascript資料結構與演算法筆記(六):雙向連結串列
javascript資料結構與演算法筆記(六):雙向連結串列 一:簡介 二:ES6版DoublyLinkedList類 一:簡介 雙向連結串列和普通連結串列的區別在於,在連結串列中,一個節點只有鏈向下一個節點的連結,而
javascript資料結構與演算法筆記(五):連結串列
javascript資料結構與演算法筆記(五):連結串列 一:簡介 二:ES6版LinkedList類 一:簡介 連結串列儲存有序的元素集合,但不同於陣列,連結串列中的元素在記憶體中並不是連續放置的。每個 元素由一個儲
javascript資料結構與演算法筆記(四):迴圈佇列
javascript資料結構與演算法筆記(四):迴圈佇列 一:簡介 二:ES6版Queue類 一:簡介 迴圈佇列是指佇列頭元素的移除會追加到佇列的尾部。我們此次拿一個例子來實現迴圈佇列,例子名就是模擬民間遊戲擊鼓傳花即
javascript資料結構與演算法筆記(三):優先佇列
javascript資料結構與演算法筆記(三):優先佇列 一:簡介 二:ES6版PriorityQueue類 一:簡介 優先佇列是元素的新增和移除是基於優先順序的。一個現實的例子就是機場登機的順序。頭等艙和商務艙乘客的
javascript資料結構與演算法筆記(二):普通佇列
javascript資料結構與演算法筆記(二):普通佇列 一:簡介 二:ES6版Queue類 一:簡介 佇列是遵循FIFO( First In First Out, 先進先出,也稱為先來先服務)原則的一組有序的項。 佇
資料結構與演算法複習(15)—— 博弈論
一批文章: http://hi.baidu.com/liveroom/blog/category/%B2%A9%DE%C4%C2%DB http://blog.csdn.net/logic_nut/archive/2009/10/21/4706649.aspx http://blog.csdn.net/lo
資料結構與演算法複習(10)—— 字尾陣列與字串問題
放此待查。 RMQ 問題 http://www.notonlysuccess.com/?p=356 利用字尾陣列求解一個字串中最長重複子串問題 http://cylixstar.blogbus.com/logs/28350301.html http://imlazy.ycool.com/post.20118
資料結構與演算法複習(3)—— 線段樹
http://www.cppblog.com/MemoryGarden/archive/2009/04/11/79565.aspx http://www.notonlysuccess.com/?p=59 http://edu.codepub.com/2009/1125/18163.php POJ 2104,
資料結構與演算法總結(六)詞典
詞典結構:dict允許多個詞條擁有相同的關鍵碼。詞條為關鍵碼與值的合成結構。 對映結構:map要求不同詞條的關鍵碼互不相同。 例如跳轉表:一種高效的詞典結構,基於列表構造,時間複雜度為O(logn)。就是橫層連結串列代表關鍵碼,縱向列表代表值。一個關鍵碼代表多個一樣的值。 詞典dict操
資料結構和演算法總結(一)
任何一位有志於駕馭計算機的學生,都應該從這些方面入手,重點是:不斷學習,反覆練習,勤於總結。 究竟什麼是演算法呢?所謂演算法,是指基於特定的計算機模型,旨在解決某一問題而設計的一個指令序列。 演算法應具有以下流程:輸入與輸出;基本操作即加減乘除;確定性即明確的指令序列,可行性即可在對應計算機