程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 數據結構 基礎 論述,

C# 數據結構 基礎 論述,

編輯:C#入門知識

C# 數據結構 基礎 論述,


 

 

問題:

信息世界中,計算機是加工處理的信息的載體,在這個過程中面臨著三個問題:

1.如何方便高效的組織數據

2.如何在計算機中存儲數據(內存和外存)

3.如何對存儲的數據進行高效的操作

 

目的:

我們都知道,我們都會表述一件事,老板交代你一件事情,你要陳述給你的員工,讓他們明白你的意思,有些人可能簡要的幾句話

就把事情表達清楚,可是有的人說了一大堆才明白他說什麼,這個比喻不太恰當,同樣在面對同一個程序的時候我們就可以出現兩

種程序:有的人寫出來的程序效率很高,有的人卻用復雜的方法來解決一個簡單的問題。

簡而言之目的有三個:

1.形成自己數據結構知識庫

2.提高程序設計水平

3.提供程序設計者的基本技能

 

 

 

基本概念和術語

1.數據(Data):能被計算機識別的信息的載體,數值數據,聲音,文字等等

2.數據元素(Data Element)和數據項(Data Item)DE:數據的實體 DI:數據的屬性 最常見的是數據表的一條記錄(用戶) 和

字段(用戶名,密碼,性別等等)

3.數據對象(Data Object)性質相同的數據元素的集合 例如:{0,1,2,3,4} , {a,b,c,d} , {用戶A,用戶B,用戶C….}

4.數據類型(Data Type)int,string等等

 

5.數據結構(Data Structure) 在數據集合的基礎上組織起來的有關系數據結構,通常有四類節本數據結構:A集合 B線性結構 C樹形結

構 D 網狀結構或者圖形結構

 

A Set   B Linear Structure      C Tree Structure     D Graphic Structure

數據結構記做 DS(Data Structure) 是一個二元組 DS=(D,R) D是有限的數據元素集合 R 是元素之間關系

 

 

通過例子理解後三種數據結構:

 

B 線性數據結構 學生信息表

一行:數據元素 列:數據項  元素與元素的關系:1對1

 

 

C 樹形結構 家譜

 

 

這個不多解釋。節點:數據元素  關系:一對多 或者 多對一

 

 

D 圖形結構

 

 

圖形結構:交通圖 元素:城市 關系多對多

 

數據結構

包括數據的邏輯結構和數據的物理結構,物理結構也叫存儲結構,我們討論數據結構的目的是為了在計算機中實

現對它的操作,還要在計算機表示和存儲,數據存儲結構分為:順序存儲結構和鏈式存儲結構,順序存儲結構:是把相鄰

數據存儲在物理上相同存儲單元中,在C#中用數組來實現順序存儲,最常見的是 數組;鏈式存儲,Node+Reference

Domain 在.net 中內存棧區和堆區,棧順序存儲,對應的對象在堆中,則指向了堆中的地址。

 

算法

算法與數據結構關系非常密切。

算法的特性:1有窮性  2確定性  3輸出和輸出 4能行性

評定標准:1正確性  2可讀性 3健壯性  4運行時間(時間復雜度Time Complexity)  5占用空間(空間復雜度Space Complexity)

影響性能因素:1.硬件條件  2.實現計算機的語言(語言越高級 效率越低) 3編程語言的編譯器和解釋器 4 操作系統

 

算法的時間復雜度

算法是由控制結構和原操作構成的,其執行的時間取決於二者的綜合效果。為了便於比較同一問題的不同算法,通常把算法中基本操作

重復執行的次數(頻度)作為算法的時間復雜度。T(n)=0(f(n)),如果一個算法沒有循環語句,那麼算法中的節本操作的執行頻率與問題

無關,記做0(1),也成為常數階,如果算法只有一重循環納悶算法執行頻率與問題規模N呈線性增大關系,記做 0(n),也叫線性階

常用的還有平方階乘0(n*n) 立方階0(n*n*n)等等

例 1:x=n;

y=0;

while(y<x)

{

y=y+1; // T(n) 時間復雜度

}

 這是一個一重循環,循環次數為N 時間復雜度為線性:記做T(n)=0(0)

例 2:for(i=1;i<n;i++)

{

  for(j=0;j<n;j++)

{

   A[i][j]=i*j; //T(n) 時間復雜度

}

}

雙重循環 外層循環的循環次數是 N 內層for循環次數為 N 時間復雜度 T(n)=0(n*n);

 

例3 : x=n;

y=0;

while(x>=(y+1)*(y+1))

{

y=y+1; //T(n) 時間復雜度

}

 

一重循環 while 的循環次數為 根號 N 所以時間復雜度 T(n)=0(根號N)

 

例4 :for(i=0;i<m;i++)

{

for(j=0;j<t;j++)

{

    for(k=0;k<n;k++)

    {

      c[i][j]=c[i][j]+a[i][k]*b[k][j];//T(n) 時間復雜度 被執行次數

    }

}

}

三重循環:時間復雜度 T(n)=0(m*t*j);

 

數學基本概念

想到算法就不得不想到數學,集合表示法:窮舉法S={0,5,8,9} 描述法:S={x|x是偶數,且0<X<10};

集合的特點:確定性,互異性,無序性

1000個不同編碼需要多少位?⌈log21000⌉=10 位

10 位可以表示多少個不同的編碼? 10 位可以產生 1024 個不同的可用編碼

經典的例子:折半算法 打個不靠譜的比喻啊 網線壞了 不知道那個地方壞了 網線為100米(最大了)要查多

少次,才能找到故障點,使用折半算法(也叫二分查找法)log2 100 次

指數和對數是基本概念也是相互轉化的過程。

 

C# 知識點:接口 Icomparable,IEnumerable,IEnumberator,ICollection,IDictionary,IList

,裝箱拆箱,泛型

 

未完待續……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved