数据结构绪论

目录

一、数据结构的基本概念

(一)数据

(二)数据元素

(三)数据对象

(四)数据类型

(五)数据结构

二、数据结构三要素

(一)逻辑结构

(二)数据存储结构

(三)数据的运算

         (四)经典例题

三、算法

(一)算法的基本概念

(二)好算法的目标

(三)经典例题 


一、数据结构的基本概念

(一)数据

        数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别和处理的符号的集合。

(二)数据元素

     数据元素是数据的基本单位。通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素不可分割的最小单位。例如学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。 

        数据=数据元素+数据元素+...+数据元素

        数据元素=数据项+数据项+...数据项


(三)数据对象

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

        数据=xx个数据对象=xxx个数据元素

(四)数据类型

        数据类型是一个值的集合和定义,以及集合上一组操作的总称。

1.原子类型

        其值不可再分的数据类型。如bool和int型

2.结构类型

        其值可以再分解成若干成分的数据类型

3.抽象数据类型

        抽象数据组织及与之相关的操作

(五)数据结构

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


二、数据结构三要素

(一)逻辑结构

对应有相应特点:

        集合:除了“同属一个集合”外,别无其他关系

        线性结构:只存在一对一关系

        树形结构:存在一对多关系

        图状结构:存在多对多关系

特别注意:有序表是指表中所有数据元素的数值以递增或递减方式有序排列,是一种逻辑结构

(二)数据存储结构

        又称映像或物理结构

1.顺序结构

2.链式结构

3.索引结构

        在存储元素的同时额外建立索引表

4.散列结构

        又称哈希结构,根据关键字直接计算元素的存储地址

(三)数据的运算

        包括定义和实现,定义是针对数据的逻辑结构,实现针对数据的存储结构

(四)经典例题

1.可以用()定义一个完整的数据结构

        A.数据元素                B.数据对象                C.数据关系                D.抽象数据类型

        抽象数据类型描述了数据的逻辑结构和抽象运算

 2.关于以下数据结构的说法中,正确的是()

        A.数据的逻辑结构独立于其存储结构

        B.数据的存储结构独立于其逻辑结构

        C.数据的逻辑结构唯一决定其存储结构

        D.数据结构仅由其逻辑结构和存储结构决定

        逻辑结构独立于存储结构,存储结构是逻辑结构的映射

3.链式存储设计时,结点内的存储单元地址()

        A.一定连续

        B.一定不连续

        C.不一定连续

        D.部分连续,部分不连续

        关键字,在节点内,所以是一定连续的

4.对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?

        对于两种不同的数据结构,它们的逻辑结构和物理结构完全有可能相同。

        比如二叉树和二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,前者通常用于表示层次,后者通常用于排序和查找。虽然它们的运算都有建立树、插入节点、删除节点和查找节点等功能。

        但是对于二叉树和二叉排序树,这些运算的定义是不同的,以查找节点为例,二叉树的时间复杂度为O(n),而二叉排序树的时间复杂度为O(\log_2n)


三、算法

(一)算法的基本概念

        算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:

1.有穷性

        一个算法必须再执行有穷步骤后结束,且每一步都可在有穷时间内完成。

2.确定性

        算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

3.可行性

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

4.输入

        一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

5.输出

        一个算法有一个或多个输出,这些输出是与输入有着有某特定关系的量。

(二)好算法的目标

1.正确性

        算法应该能够正确地解决求解问题

2.可读性

        算法应具有良好的可读性,以帮助人们理解

3.健壮性

        输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

4.效率与低存储量需求

        就是要又快,占得空间又要越小。

(三)经典例题

1.求整数n(n≥0)的阶乘的算法如下,其时间复杂度是()

int fact(int n)
{
    if(n≤1)
    return 1;
    return n*fact(n-1);
}

        A.O(\log_2 n)                 B.O(n)                C.O(\small n\log_2 n)                D.O(\small n^2)

        显然是n次,选B,因为每次执行后都会n-1进入下一次函数

2.下列函数的时间复杂度是()

int func(int n)
{
    int i=0,sum=0;
    while(sum<n) sum+=++i;
    return i;
}

         A.O(\small \log n)                B.O(\small n^\frac{1}{2})                C.O(n)                D.O(\small n\log n)

        sum+=++i等同于++i;sum=sum+i,每执行一次i自增1。i=1时,sum=0+1;i=2时,sum=0+1+2;依次类推sum=0+1+2+3+...+i=(1+i)*i/2,也就是选B。

3.以下算法中循环中的语句执行次数是()

int m=0,i,j;
for(i=1;i≤n;i++)
for(j=1;j≤2*i;j++)
    m++;

        A.n(n+1)                B.n                C.n+1                D.\small n^2

        \small \sum^n_{i=1}\sum^{2i}_{j=1}1=\sum^n_{i=1}2i=n(n+1)

4.一个算法所需时间由下述递归方程表示,试求出该算法的时间复杂度级别

                                                \small T(n)=\begin{cases} 1, & n =0\\ 2T(n/2)+n, & n>0 \end{cases}

式中,n是问题的规模,为简单起见,设n是2的整数次幂。

        设\small n=2^k(k\geq0),根据题目所给 定义有{\color{Cyan} }T(2^k)=2T(2^{k-1})+2^k

                                                                             =2^2T(2^{k-2})+2\times2^k

        由此可以得到一般递推公式   T(2^k)=2^iT(2^{k-i})+i\times2^k

                                            进而得T(2^k)=2^kT(2^0)+k\times2^k

                                                   即T(n)=2^{\log_2n}+\log_2n\times n

                                                                =n(log_2n+1)

        因此答案就是O(nlog_2n)

5.分析以下各程序端,求出算法的时间复杂度

(1)

for(i=1;i<=n;i++)
    for(j=1;j≤i;j++)
        for(k=1;k≤j;k++)
            x++;

(2)

for(i=0;i<n;i++)
    for(j=0;j<m;j++)
        a[i][j]=0;

        第(1)题

        T(n)=O(\sum ^n_{i=1}\sum^i_{j=1}\sum^j_{k=1}1)=O(\sum ^n_{i=1}\sum^i_{j=1}j-1+1)=O(\sum ^n_{i=1}\sum^i_{j=1}j)

                 =O(\sum ^n_{i=1}1+2+3+...+i)=O(\sum ^n_{i=1}\frac{i(1+i)}{2})

                 =O(\frac{1}{2}\sum^n_{i=1}i^2+\frac{1}{2}\sum^n_{i=1}i)

        然后1^2+2^2+3^3+...+n^2=\frac{n(n+1)(2n+1)}{6}

                O(\frac{n(n+1)(n+2)}{12}+\frac{(1+n)n}{4})

        所以明显时间复杂度为O(n^3)

        第(2)题       

        两个for循环没有因果关系,所以直接为O(m\times n)


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值