數據結構與算法(一)

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

1.基本數據結構:

    集合:不存在任何關係。

    線性結構:一對一的關係。例如學生信息表就是一個線性結構:其中包括學號、姓名、班級、性別、出生年月。

    樹形結構:一對多的關係。樹形結構具有嚴格的層次關係。家族關係是典型的樹形結構。

    圖形結構:多對多的關係。四個城市的公路交通圖是典型的圖狀結構,又稱網狀結構。

2.算法:

      描述算法的好壞:算法時間複雜度。

       對某一特定類型的問題的求解步驟的一種描述。是指令的有限序列。其中每條指令表示一個或多個操作。

   算法複雜度:該算法的運行時間與問題規模的對應關係。通常把算法中的基本重複執行的次數(頻度)作爲算法的時間複雜度。算法中的基本操作一般是指算法中最深層循環句的語句。

3.算法時間複雜度

    算法中基本操作重複執行的頻度T(n)是問題規模n的某個函數f(n).記作:T(n)=O(f(n)).

     O表示:隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同。或者說"O"表示數量級的概念。

    O(1).常數階:算法沒有循環語句,則算法中基本操作執行頻度與問題規模n無關。

   O(n).算法只有一個重循環,基本操作的執行頻度與問題規模n呈線性增大關係。

    O(n*n)[就是n的平方]:平方階   除此之外還有立方階,對數階等。

   舉例:O(N)                  O(N*N)                                O(N*N*N)

       x=n;                              for( int i=1;i<n;i++ )               x=n;

      y=0;                               {                                             y=0;

      while(y<x)                       for(j=0;j<n;j++)                  while(x>=(y+1)(y+1))

       {                                    {                                         {

            y=y+1;                                 A[i][j]=i*j;                          y=y+1;

     }                                       }                                         }

                                            }

3.線性表

         具有相同類型的數據元素的一個有限序列。

         相同類型:指的是線性表中的數據元素都屬於同種類型。

         有限:指的是線性表中的數據元素個數是有限的,線性表中的每一個數據元素都有自己的位置。

       基本操作:用接口表示

        public interface IListDS<T>

         {

              int  GetLength();//求長度

             void Clear();//清空操作

             bool IsEmpty();//判斷線性表是否爲空

             void Append();//追加操作

             void Insert();//插入操作

            T Delete(int i);//刪除操作

            T GetElem( int i );//取出不刪除

            int Locate( T value);//按值查找某個位置

          }

4.線性表種類

     順序表、單向鏈表、雙向鏈表、循環鏈表

     順序表是指用一塊地址連續的存儲空間依次存儲線性表的數據元素。

 特點:容量固定、訪問速度快

    順序表典型方法:追加、插入、刪除

     @追加

                                      0   1   2   3   4   5   6

 50                          

datas指向存儲空間的數組。    last指向最後一次操作的索引   比如上圖last=0,沒有值就爲-1.

追加操作時間複雜度:和已經存在的數據沒有任何關係。時間複雜度O(1).

@插入

    順序表上的插入操作,時間主要消耗在數據的移動上。

     最好的情況下:插入末尾,沒有移動。相當於追加。

     最壞的情況下:插入頭部,即第0個下標位置。

   平均移動次數:n/2

   時間複雜度爲:O(n)

@ 刪除

  刪除操作時間和插入操作相似,時間主要消耗在數據的移動上。

   最好的情況下:刪除末尾,無移動

  最壞的情況下:刪除頭部,移動n-1次。

平均移動:(n-1)/2

時間複雜度:O(n)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章