数据结构--基本知识点

——前言——

一、基本概念

1、数据:描述客观事物属性的符号集合。

2、数据元素:是数据的基本单位,通常作为一个整体进行考量和处理。

3、数据项:是构成数据元素不可分割的最小单位,一个数据元素有若干个数据项组成。

4、数据对象:具有相同性质的数据元素的集合,是数据的一个子集。

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

6、数据类型:是一个值的集合和定义在此集合上的一组操作的总称。

7、抽象数据类型(ADT):是抽象数据组织与之相关的操作。定义一个ADT就是定义一种数据结构——”逻辑结构+数据的运算”

    --扩:

  ①原子类型;其值不可再分的数据类型。

    如:bool类型{值的范围:true、false;可进行操作:与、或、非....}

            int类型{-2147483648~ 2147483647;可进行操作:加、减、乘、除、模运算..}

  ②结构类型;其值可以在分解为若干成分(分量)的数据类型。

如: struct Coordinate
    {
        int x;//横坐标
        int y;//纵坐标
    };

——数据结构——

一、三要素

(1)逻辑结构

  : 数据间的关系

    1、集合(无关系);

    2、线性结构(一一对应)

    3、树性结构(一对多);

    4、图结构(多对多)

   --扩:队列(先进先出/后进后出)、栈(后进先出/先进后出)、字符串是特殊的线性结构

(2)数据的运算

  : 针对某种逻辑结构,结合实际需求,定义基本运算。

(3)物理结构(存储结构)

  : 如何用计算机实现这种数据结构。

    1、顺序存储:逻辑上相邻的元素存储在物理位置上也相邻的存储单元中。

    2、链式存储:逻辑上相邻的元素在物理上可以不相邻。

    3、散列存储(哈希存储):根据元素的关键字直接计算出该元素的存储地址。

    4、索引存储:在存储元素信息的同时,还建立附加索引表,在索引表的每一项称为索引项,索引项的一般形式(关键字,地址)

二、算法

程序=数据结构+算法

(1)算法的定义

  : 对特定问题求解步骤的一种描述,是指令的有限序列,其中每条指令表示一个或多个操作。

(2)算法的特性

    1、有穷性:算法步骤有穷。得出结果的时间有穷。

    2、确定性:相同的输入只能得到相同的输出。

    3、可行性:描述的操作都可以通过已经实现的基本运算执行有限次来实现。

    4、输入:有0个或多个输入

    5、输出:有一个或多个输出

(3)"好"的算法的特性

     1、正确性:算法能正确解决问题。

     2、可读性:加注释,算法具有良好的可读性,帮助人们理解。

     3、健壮性:输入非法数据时,算法能恰当做出反应或进行处理。

     4、高效率:时间复杂度低.

     5、低存储需求:空间复杂度低.

三、算法的效率

(1)时间复杂度

    1、时间开销T(n)与问题规模n的关系表达式中,用数量级O(n)取阶数最高的部分。

如:  T(n)=3n+1 ——> O(n)=n;

       T(n)=2*n^2+1000 ——> O(n)=n^2

    2、多个时间开销T(n)相加时——取最大的一个;相乘时——取乘积

    3、O(1)<O(log2 n)<O(n)<O(n*log2 n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) ——常数幂指阶

    4、3种复杂度——最好情况、最坏情况、平均情况

(2)空间复杂度

     1、空间 / 内存开销S(n)与问题规模n的关系:

       ①问题规模与空间无关时:O(1)

       ②问题规模与空间有关时:原理与时间复杂度类似

           --函数定义时,有空间开销;

如:void fruits(int n)
   {
        int orrange[n][n];//声明一个二维数组       
        int apple[n];//声明一个一维数组
   }

--空间复杂度:S(n)=O(n^2)+O(n)=O(n^2),即S(n)=O(n^2)

            --函数调用时,同样有空间开销。

如:void funcation(n) //定义函数
   {
       if(n=1)
       {
           n=1;
        }
        else
        {
            n*funcation(n-1);
        }
   }
   int main()
   {                      
       funcation(5); //函数调用
   }

--空间复杂度:S(n)=O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值