数据结构与算法(一)

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

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)

 

 

 

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