C語言數據結構+數據庫+操做系統

http://cv.qiaobutang.com/post/55c419b20cf2009bd4607795node

第二部分是專業相關的C ,數據庫,操做系統,數據結構。算法

http://c.biancheng.net/cpp/u/shuju/數據庫

數據(Data)是信息的載體,它可以被計算機識別、存儲和加工處理。它是計算機程序加工的原料,應用程序處理各類各樣的數據。計算機科學中,所謂數據就是計算機加工處理的對象,它能夠是數值數據,也能夠是非數值數據。數值數據是一些整數、實數或複數,主要用於工程計算、科學計算和商務處理等;非數值數據包括字符、文字、圖形、圖像、語音等。數組

數據結構(Data Structure)是指互相之間存在着一種或多種關係的數據元素的集合。在任何問題中,數據元素之間都不會是孤立的,在它們之間都存在着這樣或那樣的關係,這種數據元素之間的關係稱爲結構。根據數據元素間關係的不一樣特性,一般有下列四類基本的結構:數據結構

  1. 集合結構。在集合結構中,數據元素間的關係是「屬於同一個集合」。集合是元素 關係極爲鬆散的一種結構。
  2. 線性結構。該結構的數據元素之間存在着一對一的關係。
  3. 樹型結構。該結構的數據元素之間存在着一對多的關係。
  4. 圖形結構。該結構的數據元素之間存在着多對多的關係,圖形結構也稱做網狀結構。

 數據的存儲結構可採用順序存儲或鏈式存儲的方法。

順序存儲方法是把邏輯上相鄰的元素存儲在物理位置相鄰的存儲單元中,由此獲得的存儲表示稱爲順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,一般藉助於程序設計語言中的數組來實現。

鏈式存儲方法對邏輯上相鄰的元素不要求其物理位置相鄰,元素間的邏輯關係經過附設的指針字段來表示,由此獲得的存儲表示稱爲鏈式存儲結構,鏈式存儲結構一般藉助於程序設計語言中的指針類型來實現。

除了一般採用的順序存儲方法和鏈式存儲方法外,有時爲了查找的方便還採用索引存儲方法和散列存儲方法。函數

 

 數據類型

在高級程序設計語言中,數據類型可分爲兩類:一類是原子類型,另外一類則是結構類型。原子類型的值是不可分解的。如C 語言中整型、字符型、浮點型、雙精度型等基本類型,分別用保留字int、char、float、double 標識。而結構類型的值是由若干成分按某種結構組成的,所以是可分解的,而且它的成分能夠是非結構的,也能夠是結構的。例如,數組的值由若干份量組,每一個份量能夠是整數,也能夠是數組等。在某種意義上,數據結構能夠當作是「一組具備相同結構的值」,而數據類型則可被當作是由一種數據結構和定義在其上的一組操做所組成的。post

⒈時間複雜度

一個程序的時間複雜度(Time complexity)是指程序運行從開始到結束所須要的時間。

一個算法是由控制結構和原操做構成的,其執行時間取決於二者的綜合效果。爲了便於比較同一問題的不一樣的算法,一般的作法是:從算法中選取一種對於所研究的問題來講基本運算的原操做,以該原操做重複執行的次數做爲算法的時間度量。通常狀況下,算法中原操做重複執行的次數是規模n 的某個函數T(n)。許多時候要精確地計算T(n)是困難的,咱們引入漸進時間複雜度在數量上估計一個算法的執行時間,也可以達到分析算法的目的。

定義(大Ο記號):若是存在兩個正常數c 和n0,使得對全部的n,n≥n0,有:spa

f(n) ≤ cg(n)操作系統

則有:.net

f(n) = Ο(g(n))


例如,一個程序的實際執行時間爲T(n)=2.7n3+3.8n2+5.3。則T(n)=Ο(n3)。使用大Ο記號表示的算法的時間複雜度,稱爲算法的漸進時間複雜度(Asymptotic Complexity)。

一般用Ο(1)表示常數計算時間。常見的漸進時間複雜度有:

Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n)

 

⒉空間複雜度


一個程序的空間複雜度(Space complexity)是指程序運行從開始到結束所需的存儲量。

程序的一次運行是針對所求解的問題的某一特定實例而言的。例如,求解排序問題的排序算法的每次執行是對一組特定個數的元素進行排序。對該組元素的排序是排序問題的一個實例。元素個數可視爲該實例的特徵。程序運行所需的存儲空間包括如下兩部分:

⑴固定部分。這部分空間與所處理數據的大小和個數無關,或者稱與問題的實例的特徵無關。主要包括程序代碼、常量、簡單變量、定長成分的結構變量所佔的空間。

⑵可變部分。這部分空間大小與算法在某次執行中處理的特定數據的大小和規模有關。例如100 個數據元素的排序算法與1000 個數據元素的排序算法所需的存儲空間顯然是不一樣的。

線性表的定義


線性表是一種線性結構。線性結構的特色是數據元素之間是一種線性關係,數據元素「一個接一個的排列」。在一個線性表中數據元素的類型是相同的,或者說線性表是由同一類型的數據元素構成的線性結構。在實際問題中線性表的例子是不少的,如學生狀況信息表是一個線性表:表中數據元素的類型爲學生類型; 一個字符串也是一個線性表:表中數據元素的類型爲字符型,等等。

綜上所述,線性表定義以下:線性表是具備相同數據類型的n(n>=0)個數據元素的有限序列,一般記爲:

(a1,a2,… ai-1,ai,ai+1,…an)

其中n爲表長, n=0 時稱爲空表。
表中相鄰元素之間存在着順序關係。將ai-1 稱爲ai 的直接前趨,ai+1 稱爲ai 的直接後繼。就是說:對於ai,當i=2,...,n 時,有且僅有一個直接前趨ai-1.,當i=1,2,...,n-1 時,有且僅有一個直接後繼ai+1,而a1 是表中第一個元素,它沒有前趨,an 是最後一個元素無後繼。

 線性表的基本操做


在第一章中提到,數據結構的運算是定義在邏輯結構層次上的,而運算的具體實現是創建在存儲結構上的,所以下面定義的線性表的基本運算做爲邏輯結構的一部分,每個操做的具體實現只有在肯定了線性表的存儲結構以後才能完成。

線性表上的基本操做有:

⑴ 線性表初始化:Init_List(L)
初始條件:表L不存在操做結果:構造一個空的線性表

⑵ 求線性表的長度:Length_List(L)
初始條件:表L存在
操做結果:返回線性表中的所含元素的個數

⑶ 取表元:Get_List(L,i)
初始條件:表L存在且1<=i<=Length_List(L)
操做結果:返回線性表L中的第i個元素的值或地址

⑷ 按值查找:Locate_List(L,x),x是給定的一個數據元素。
初始條件:線性表L存在
操做結果:在表L中查找值爲x的數據元素,其結果返回在L中首次出現的值爲x的那個元素的序號或地址,稱爲查找成功; 不然,在L中未找到值爲x的數據元素,返回一特殊值表示查找失敗。

⑸ 插入操做:Insert_List(L,i,x)
初始條件:線性表L存在,插入位置正確(1<=i<=n+1,n爲插入前的表長)。
操做結果:在線性表L的第i 個位置上插入一個值爲x 的新元素,這樣使原序號爲i , i+1, ... , n 的數據元素的序號變爲i+1,i+2, ... , n+1,插入後表長=原表長+1。

⑹ 刪除操做:Delete_List(L,i)
初始條件:線性表L存在,1<=i<=n。
操做結果:在線性表L中刪除序號爲i的數據元素,刪除後使序號爲i+1, i+2,..., n的元素變爲序號爲i, i+1,...,n-1,新表長=原表長-1。

線性表的順序存儲是指在內存中用地址連續的一塊存儲空間順序存放線性表的各元素,用這種存儲形式存儲的線性表稱其爲順序表。由於內存中的地址空間是線性的,所以,用物理上的相鄰實現數據元素之間的邏輯相鄰關係是既簡單,又天然的。如圖2.1 所示。

設a1的存儲地址爲Loc(a1),每一個數據元素佔d個存儲地址,則第i個數據元素的地址爲:

Loc(ai)=Loc(a1)+(i-1)*d 1<=i<=n

單鏈表


鏈表是經過一組任意的存儲單元來存儲線性表中的數據元素的,那麼怎樣表示出數據元素之間的線性關係呢?爲創建起數據元素之間的線性關係,對每一個數據元素ai,除了存放數據元素的自身的信息ai 以外,還須要和ai一塊兒存放其後繼ai+1 所在的存貯單元的地址,這兩部分信息組成一個「結點」,結點的結構如圖2.6 所示,每一個元素都如此。存放數據元素信息的稱爲數據域,存放其後繼地址的稱爲指針域。所以n個元素的線性表經過每一個結點的指針域拉成了一個「鏈子」,稱之爲鏈表。由於每一個結點中只有一個指向後繼的指針,因此稱其爲單鏈表。

鏈表是由一個個結點構成的,結點定義以下:
typedef struct node
{ datatype data;
struct node *next;
} LNode,*LinkList;

定義頭指針變量:
LinkList H;

 

在鏈表的頭部插入結點創建單鏈表

鏈表與順序表不一樣,它是一種動態管理的存儲結構,鏈表中的每一個結點佔用的存儲空間不是預先分配,而是運行時系統根據需求而生成的,所以創建單鏈表從空表開始,每讀入一個數據元素則申請一個結點,而後插在鏈表的頭部,如圖2.10 展示了線性表:(25,45,18,76,29)之鏈表的創建過程,由於是在鏈表的頭部插入,讀入數據的順序和線性表中的邏輯順序是相反的。

在單循環鏈表上的操做基本上與非循環鏈表相同,只是將原來判斷指針是否爲NULL變爲是不是頭指針而已,沒有其它較大的變化。

下面先請看圖2.22 ,在圖2.22中,規模較大的結構數組sd[MAXSIZE] 中有兩個鏈表: 其中鏈表SL是一個帶頭結點的單鏈表,表示了線性表(a1, a2, a3, a4, a5),而另外一個單鏈表AV是將當前sd 中的空結點組成的鏈表。

相關文章
相關標籤/搜索