數據結構緒論(頭大版)

∞本章是經過資源的導入解析了
1.1數據結構的基本概念
1.2算法和算法分析
1.3算法描述與C語言數據類型
================================We will Start==========================================
1.1數據結構的基本概念
  定義:數據結構是一門研究非數值計算的程序設計問題中計算機粗啊哦作對象及他們之間的關係和操做的學科
1.1.2 :數詞概念
  1.數據(data):數據是指可以輸入到計算機中,並被計算機識別和處理的符號的集合
  2.數據元素(data element):
數據元素時數據的基本單位.在計算機中,數據元素一般做爲一個總體來處理.一個數據
元素能夠由若干個數據項組成.數據項是具備獨立意義的最小數據單位,是對數據元素屬性的描述
  3.數據對象(data object):數據對象是具備相同性質的數據元素的集合,是數據的一個子集.
eg:整數集合:N={0,±1,±2,...}無限集
     字符集合:c={'A','B',....,'Z'}有限集
  4.邏輯結構(logic structure):描述的是數據元素之間的
    (1)線性結構:數據元素之間存在一對一的關係
    (2)樹型結構:數據元素之間存在一對多的關係
    (3)圖結構或網結構:結構中的數據元素之間存在多對多的關係算法

3中數據結構分爲兩大類:線性結構和非線性結構 如圖所示

  
注:數學的方法給出數據的邏輯結構的定義,數據結構可由一個二元組(D,S)定義,
    其中D是數據元素的有限集,S是D中元素的關係的有限集。
    
5.存儲結構(storage structure):存儲數據又叫物理結構,是數據結構在計算機中的表示
順序存儲結構
鏈式存儲結構
 總結:
數據結構的內容
可概括爲三個部分邏輯結構、存儲結構和運算集合
==========================================================================
1.2算法和算法分析
1.2.1算法(Algorithm)
    (1):有窮性:一個算法包括的指令數必須有限,每一條指令的執行次數也必須有限
    (2):肯定性:算法的每一條指令必須有確切的定義,無二性
    (3):可行性:算法中的每一條指令均可以經過有限次、可實現的基本運算且在有限的時間內實現
    (4):輸入:一個算法具備零個或多個輸入
    (5):輸出:一個算法具備一個或多個輸出
設計好的算法應考慮:1.正確性2.可讀性3.健壯性4.高效性和低存儲量
1.2.2算法分析
  有兩種衡量算法效率的方法
    (1)過後統計法
    (2)事前分析估算法
1.算法的時間複雜度
  :算法中的基本操做執行的次數是問題規模n的某個函數f(n),算法的時間量度記做:數組

T(n)=O(f(n))
 :隨着問題規模n的增大,算法執行時間的增加率和f(n)的增加率相同,成爲算法的
漸近時間複雜度(簡稱時間複雜度)
1.1.語句頻度
  語句頻度是指該語句在一個算法中重複執行的次數給出X=X+1,語句頻度分別爲1,n,n²
    (1)x=x+1;時間複雜度爲O(1),成爲常量階
    (2) for(i=1;i<=n;i++)x=x+1;時間複雜度爲O(n),稱爲線性階
    (3)for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)x=x+1;時間複雜度爲O(n²),稱爲平方階
2.算法的空間複雜度
  存儲空間的固定部分
    程序指令代碼的空間,常數、簡單變量、定長成分(如數組元素、結構成分、對象的數據成員等)變量所佔的空間
  可變部分
    對數據進行操做時所需的輔助空間
  空間複雜度:算法所需存儲空間的度量.
                    S(n)=O(f(n))
                  其中,f(n)是算法的額外存儲空間隨問題規模n增加的函數.若是S(n)=O(1),表示算法爲本地工做,即:隨問題
                  規模n的增加,額外存儲空間不變.
例1:交換A和B的內容
  (1)temp=A; (2)A=B; (3)B=temp;
    答:這3條語句的頻度都是1,f(n)=3.因此,該程序的執行時間與問題規模無關,f(n)=3.算法的時間複雜度爲常數階,記爲
    T(n)=O(1);
例2:累加
(1)x=0;       /執行1次/    
(2)y=0;       /執行1次/        
(3)x++;        /執行n次/
(4)y++;        /執行n²/
for(i=1;i<=n;i++)
for(j=1;j<n;j++)
        答:全部語句的頻度之和f(n)爲n²+n+2.當n---->∞時,顯然有limf(n)/n²=lim(n²+n+2)/n²=1因此,T(n)=O(n²).
        注:lim是微積分中的基礎概念,它指的是變量在必定的變化過程當中,從總的來講逐漸穩定的這樣一種變化趨勢以及所趨向的值( 極限值)。
例3:代碼段以下,計算算法時間複雜度
    for(i=1;i<=n;i*=2)    x++;
      答:  該算法時間複雜度是T(n)= O(log2n).
https://baike.baidu.com/item/%E5%AF%B9%E6%95%B0/91326?fromtitle=log&fromid=39110(對數階的定義)
https://baike.baidu.com/item/%E6%8C%87%E6%95%B0/3519666(指數階的定義)
        注:程序每執行一次 i就乘以2,而且i<=n,因此2的a次方小於等於n,因此時間的複雜度爲a=log2n.
例4:代碼段以下,計算該算法的時間複雜度
     for(i=0;i<n;i++)
     for(j=0;j<n;j++)
             x++;
答:x++重複執行次數隨着問題規模n增加的函數是n²,該算法時間複雜度是O(n²).
例5:代碼段以下,計算時間複雜度
     for(i=1;i<=n;i++)
     {
        for(j=1;j<=n;j++){
        x=0;
            for(k=1;k<=n;k++)
                 x+=a[i][k]*b[k][j];
                c[i][j]=x;}
}
答:該算法的時間複雜度是n*n*n也就是T(n)=O(n³).

總結:經常使用的算法時間複雜度
1.O(1)常數階 2.O(n)線性階
3.O(n²)平方階4.O(n³)立方階
5.O(2ⁿ)指數階6.O(log₂n)對數階
7.O(nlog₂n)二維階
因此時間複雜度的大小就是O(log₂n)<O(n)<O(nlog₂n)<O(n²)<O(n³)<...<O(2ⁿ)
時間的複雜度也徘徊在對數階和指數階之間

==========================================================================
1.3.1:算法描述語言
(1)數據類型
整型、實型、字符型、數組、指針、結構、共用體等...
(2)變量和符號常量
變量定義:數據類型  變量名序列
符號常量定義:     #define  符號常量名  常量值;
例如:
            #define TRUE 1
            #define FALSE 0
            #define OK 1
            #define ERROR 0
            #define OVERFLOW -2
(3)數據運算
算術運算符
    +、-、*、/、%、++、--等
關係運算符
    >、<、==、>=、<=、!=;
邏輯運算符: !、&&、||;
還有: *、.、->、[]
(4)賦值語句
變量名=表達式;
(5)控制語句
①選擇語句
    if(條件表達式)
        語句塊;
    if(條件表達式)
        語句塊1;
    else
        語句塊2

    switch(表達式){
    case常量表達式1:語句塊1;break;
    case常量表達式2:語句塊2;break;
        ......
    default:語句塊n;
}
②循環語句
    for(初始表達式;終止條件表達式;修改表達式)
         語句塊;
    while(條件表達式)
         語句塊;
    do{
        語句塊;
}whilie(條件表達式);

1.3.2 C語言的數據類型

一、基本數據類型
√整數類型
    ①基本整型,以int表示.
    ②短整型,以short int表示.
    ③長整型,以long int表示
        
√實型數據
    float、double和long double.

√字符數據
    Char

二、構造類型
√數組類型
        數組類型 數組名[常量表達式]
    

√結構體類型
    struct 結構名稱
{
    成員定義列表
};

√共用體類型
    union value
{
    int i;
    char c;
    float f;
    double d;
}value1;

√枚舉
    enum weekday
{
    Sunday,Monday,Tuesday,Wednesday,
    Thursday,Friday,Saturday
};
     枚舉類型weekday,其中包含Sunday、Monday等7個枚舉常量

三、指針類型
    數據類型*指針變量名;
例如:
    1 int a,b;
    2 int *p;
    3 p&a;
    4 a=10;
    5 b=*p;      答:
    1 int s[5]={1,2,3,4,5};
    2 int*p,a;
    3 p=&s[2];
    4 *p=-9;
    5 p++;       答:   

     =============================GameOver=================================
相關文章
相關標籤/搜索