數據結構01緒論

第一章緒論

1.1 什么是數據結構

數據結構是一門研究非數值計算的程序設計問題中,計算機的操作對象以及他們之間的關系操作的學科。

面向過程程序=數據結構+算法

數據結構是介于數學、計算機硬件、計算機軟件三者之間的一門核心課程。

數據結構是程序設計、編譯、數據庫、操作系統的基礎。

1.2 基本概念和術語

數據 data:對客觀事物的符號表示,在計算機中是指所有能輸入到計算機中并被計算機程序處理的符號的總稱。

數據對象 data object:性質相同的數據元素的集合,是數據的一個子集。

數據元素 data element:數據的基本單位,在計算機程序中通常作為一個整體進行考慮和處理。

一個數據元素可以由若干個數據項(data item)組成,數據項是不可分割的最小單位。

數據結構 data structure:相互之間存在一種或多種特定關系的數據元素的集合。

?

數據元素相互之間的關系稱為結構(structure)。

集合

線性結構 ?一對一

樹形結構 ?一對多

圖狀結構/網狀結構 ?多對多

?

數據結構的形式定義(邏輯結構):

數據結構是一個二元組

其中:D是數據元素的有限集,S是D上關系的有限集。

?

物理結構/存儲結構:數據結構在計算機中的表示(映像),包括數據元素的表示和關系的表示。

數據元素 <--> 元素(element)/結點(node)

? ?數據項 <--> 數據域(data field)

?

數據元素之間的關系在計算機中有兩種不同的表示方法:

順序映像 --> 順序存儲結構 ? ?借助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系。

非順序映像 --> 鏈式存儲結構 ? ?借助指示元素存儲地址的指針(pointer)表示數據元素之間的邏輯關系。

?

邏輯結構 --> 算法設計

物理結構 --> 算法實現

?

數據類型 data type:是一個值的集合?和定義在這個值集上的一組操作的總稱。

按值得類型,可將數據類型分為兩類:

原子類型

結構類型

在某種意義上,數據結構可以看成是“一組具有相同結構的值”;

則結構類型可以看成由一種數據結構和定義在其上的一組操作組成。

軟件系統的框架應建立在數據之上,而不是建立在操作之上。即,面向對象。

?

抽象數據類型 Abstract Data Type,簡稱ADT:是指一個數學模型以及定義在該模型上的一組操作。

??|--值域:

??????|--原子類型 atomic data type ? ?原子類型的變量值是不可分解的,如基本數據類型

??????|--固定聚合類型 fixed-aggregate data type ? ?其值由確定數目的成分由某種結構組成,如復數

??????|--可變聚合類型:表、樹、圖 variable-aggregate data type ? ?值的數目不確定

??????|--多形數據類型 ploymorphic data type ? ?多型數據類型,就是泛型,如Triplet

??|--操作

?

抽象數據類型可用以下三元組表示:

? ? ? ? ? ? ? ? ? ? ? ? ??

其中:D是數據對象,S是D上的關系集,P是對D的基本操縱。

?

基本操作有兩種參數:

賦值參數--只為操作提供輸入值;

引用參數--以&打頭,為操作提供輸入值,并且返回操作結果。

?

1.4 算法和算法分析

算法:有窮性、確定性、可行性、輸入、輸出

設計要求:正確性、可讀性、健壯性、時間復雜度、空間復雜度

?

算法效率的度量:

一個特定算法的運行工作量的大小,只依賴于問題的規模n,即它是問題規模n的函數。

一個算法是由控制語句(順序、選擇、循環)和原操作(固有數據類型的操作)構成的,算法的時間取決于兩者的綜合效果。

最深層循環內的語句中的原操作

T(n) = O(f(n))

隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間復雜度(asymptotic time complexity),簡稱時間復雜度

最壞情況下的時間復雜度。

??常量階

??對數階

??線性階

??平方階

??指數階

?

算法的存儲空間需求:

空間復雜度(space complexity)

若額外空間相對于輸入數據量來說是常數,則稱此算法為原地工作。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387220.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css3動畫、2D與3D效果

1.兼容性 css3針對同一樣式在不同瀏覽器的兼容 需要在樣式屬性前加上內核前綴&#xff1b; 谷歌&#xff08;chrome&#xff09; -webkit-transition: Opera&#xff08;歐鵬&#xff09; -o-transition: Firefox&#xff08;火狐&#xff09; -moz-transition Ie -ms-tr…

ES6學習筆記(六)數組的擴展

1.擴展運算符 1.1含義 擴展運算符&#xff08;spread&#xff09;是三個點&#xff08;...&#xff09;。它好比 rest 參數的逆運算&#xff0c;將一個數組轉為用逗號分隔的參數序列。 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...doc…

數據結構02線性表

第二章 線性表 C中STL順序表&#xff1a;vector http://blog.csdn.net/weixin_37289816/article/details/54710677鏈表&#xff1a;list http://blog.csdn.net/weixin_37289816/article/details/54773406在數據元素的非空有限集中&#xff1a; (1)存在唯一一個被稱作“第…

訓練一個神經網絡 能讓她認得我

寫個神經網絡&#xff0c;讓她認得我(?????)(Tensorflow,opencv,dlib,cnn,人臉識別) 這段時間正在學習tensorflow的卷積神經網絡部分&#xff0c;為了對卷積神經網絡能夠有一個更深的了解&#xff0c;自己動手實現一個例程是比較好的方式&#xff0c;所以就選了一個這樣比…

數據結構03棧和隊列

第三章棧和隊列 STL棧&#xff1a;stack http://blog.csdn.net/weixin_37289816/article/details/54773495隊列&#xff1a;queue http://blog.csdn.net/weixin_37289816/article/details/54773581priority_queue http://blog.csdn.net/weixin_37289816/article/details/5477…

Java動態編譯執行

在某些情況下&#xff0c;我們需要動態生成java代碼&#xff0c;通過動態編譯&#xff0c;然后執行代碼。JAVA API提供了相應的工具&#xff08;JavaCompiler&#xff09;來實現動態編譯。下面我們通過一個簡單的例子介紹&#xff0c;如何通過JavaCompiler實現java代碼動態編譯…

樹莓派pwm驅動好盈電調及伺服電機

本文講述如何通過樹莓派的硬件PWM控制好盈電調來驅動RC車子的前進后退&#xff0c;以及如何驅動伺服電機來控制車子轉向。 1. 好盈電調簡介 車子上的電調型號為&#xff1a;WP-10BLS-A-RTR&#xff0c;在好盈官網并沒有搜到對應手冊&#xff0c;但找到一份通用RC競速車的電調使…

數據結構04串

第四章 串 STL&#xff1a;string http://blog.csdn.net/weixin_37289816/article/details/54716009計算機上非數值處理的對象基本上是字符串數據。 在不同類型的應用中&#xff0c;字符串具有不同的特點&#xff0c;要有效的實現字符串的處理&#xff0c;必須選用合適的存儲…

CAS單點登錄原理解析

CAS單點登錄原理解析 SSO英文全稱Single Sign On&#xff0c;單點登錄。SSO是在多個應用系統中&#xff0c;用戶只需要登錄一次就可以訪問所有相互信任的應用系統。CAS是一種基于http協議的B/S應用系統單點登錄實現方案&#xff0c;認識CAS之前首先要熟悉http協議、Session與Co…

JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

JDK1.6版添加了新的ScriptEngine類&#xff0c;允許用戶直接執行js代碼。在Java中直接調用js代碼 不能調用瀏覽器中定義的js函數&#xff0c;會拋出異常提示ReferenceError: “alert” is not defined。[java] view plaincopypackage com.sinaapp.manjushri; import javax.sc…

數據結構05數組和廣義表

第五章 數組 和 廣義表 數組和廣義表可以看成是線性表在下述含義上的擴展&#xff1a;表中的數據元素本身也是一個數據結構。 5.1 數組的定義 n維數組中每個元素都受著n個關系的約束&#xff0c;每個元素都有一個直接后繼元素。 可以把二維數組看成是這樣一個定長線性表&…

k8s的ingress使用

ingress 可以配置一個入口來提供k8s上service從外部來訪問的url、負載平衡流量、終止SSL和提供基于名稱的虛擬主機。 配置ingress的yaml&#xff1a; 要求域名解析無誤 要求service對應的pod正常 一、test1.domain.com --> service1:8080 apiVersion: extensions/v1beta1…

JDK1.8中如何用ScriptEngine動態執行JS

JDK1.8中如何用ScriptEngine動態執行JS jdk1.6開始就提供了動態腳本語言諸如JavaScript動態的支持。這無疑是一個很好的功能&#xff0c;畢竟Java的語法不是適合成為動態語言。而JDK通過執行JavaScript腳本可以彌補這一不足。這也符合“Java虛擬機不僅僅是Java一種語言的虛擬機…

數據結構06樹和二叉樹

第六章 樹和二叉樹 6.1 樹的定義和基本術語 樹 Tree 是n個結點的有限集。 任意一棵非空樹中&#xff1a; &#xff08;1&#xff09;有且僅有一個特定的稱為根&#xff08;root&#xff09;的結點&#xff1b; &#xff08;2&#xff09;當n>1時&#xff0c;其余結點可…

2019.03.20 mvt,Django分頁

MVT模式 MVT各部分的功能: M全拼為Model&#xff0c;與MVC中的M功能相同&#xff0c;負責和數據庫交互&#xff0c;進行數據處理。 V全拼為View&#xff0c;與MVC中的C功能相同&#xff0c;接收請求&#xff0c;進行業務處理&#xff0c;返回響應。 T全拼為Tem…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中&#xff0c;提供了一些非常有用的輔助類來幫助我們進行并發編程&#xff0c;比如CountDownLatch&#xff0c;CyclicBarrier和Semaphore&#xff0c;今天我們就來學習一下這三個輔助類的用法。以下是本文目錄大綱&#xff1a;一.CountDownLatch用法二.CyclicBarrie…

數據結構07排序

第十章內部排序 10.1 概述 排序就是把一組數據按關鍵字的大小有規律地排列。經過排序的數據更易于查找。 排序前KiKj&#xff0c;且Ki在前: 排序方法是穩定的&#xff0c;若排序后Ki在前&#xff1b; 排序方法是不穩定的&#xff0c;如排序后Kj在前。 分類&#xff1a; 內…

數據結構08查找

第九章 查找 另一種在實際應用中大量使用的數據結構--查找表。 所謂查找&#xff0c;即為在一個含有眾多的數據元素的查找表中找出某個“特定的”數據元素。 查找表 search table 是由同一類型的數據元素構成的集合。集合中的數據元素之間存在著完全松散的關系&#xff0c;故…

下載Centos7 64位鏡像

下載Centos7 64位鏡像 1.打開Centos官網 打開Centos官方網站地址&#xff1a;https://www.centos.org/&#xff0c;點擊Get CentOS Now 2.點擊Minimal ISO鏡像 Minimal ISO鏡像&#xff0c;與DVD ISO鏡像的差別有很多&#xff0c;這里只說兩點 1.Minimal ISO類似于Windows的純凈…

[Objective-C語言教程]結構體(17)

Objective-C數組可定義包含多個相同類型的數據項的變量類型&#xff0c;但結構體是Objective-C編程中的另一個用戶定義數據類型&#xff0c;它可組合不同類型的數據項。 結構體用于表示記錄&#xff0c;假設要圖書館中跟蹤書籍信息。可能希望跟蹤每本書的以下屬性 - 標題作者學…