数据结构与算法

1. 数据结构

  数据结构(Data Structure)是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

  数据结构主要研究非数值计算问题程序中的操作对象以及它们之间的关系,不是研究复杂的算法。

  数据结构中的基本概念

  • 数据: 程序的操作对象,用于描述客观事物。数据是能输入计算机且能被计算机处理的各种符号的集合,是信息的载体,是对客观事物符号化的表示,能够被计算机识别、存储和加工。数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型,如int、float、char等等。
  • 数据元素: 组成数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素由若干个数据项组成。
  • 数据项: 构成数据元素的不可分割的最小单位。
  • 数据对象: 性质相同的数据元素的集合(比如:数组、链表),是数据的一个子集。

  数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构(Structure)。数据结构是指互相之间存在一种或多种特定关系的数据元素的集合;或者说,数据结构是带结构的数据元素的集合。

  一个数据结构的例子如下所示。

//声明一个结构体类型
struct _MyTeacher  //一种数据类型
{ 
	char name[32];
	char title[32];
	int age;
	char addr[128];
};

int main()
{ 
	struct _MyTeacher t1;  //数据元素
	struct _MyTeacher tArray[30];  //数据对象
	memset(&t1, 0, sizeof(t1));
	
	strcpy(t1.name, "name");  //数据项
	strcpy(t1.addr,"addr");  //数据项
	strcpy(t1.title, "addr");  //数据项
	t1.age = 1;
}

  数据结构包括以下三个方面的内容:
  数据元素之间的逻辑关系,称为逻辑结构。逻辑结构描述数据元素之间的逻辑关系,与数据的存储无关,独立于计算机,是从具体问题抽象出来的数学模型。
  数据元素及其关系在计算机内存中的表示(又称为映像),称为数据的物理结构或数据的存储结构。物理结构(存储结构)指数据元素及其关系在计算机存储器中的结构(存储方式),是数据结构在计算机中的表示。
  数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。

《数据结构与算法》
  逻辑结构与存储结构的关系

  1. 存储结构是逻辑关系的映像与元素本身的映像;
  2. 逻辑结构是数据结构的抽象,存储结构是数据结构的实现;
  3. 两者综合起来就建立了数据元素之间的结构关系。

  什么是数据结构?
  结构: 实体+关系
  数据结构: 按照逻辑关系组织起来的一批数据,按一定的存储方法把它存储在计算机中,在这些数据上定义了一个运算的集合。

2. 算法

  算法是对特定问题求解方法和步骤的一种描述,在计算机中表现为指令的有限序列,算法是独立存在的一种解决问题的方法和思想。

  算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。对算法而言,语言并不重要,重要的是思想。

  算法的特性:

  • 输入: 算法具有0或多个输入;
  • 输出: 算法至少有1个或多个输出;
  • 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤都在有穷时间内完成。
  • 确定性: 算法中的每一步都有确定的含义,不会出现二义性,在任何条件下,只有唯一的一条执行路径,即相对于相同的输入只能得到相同的输出;
  • 可行性: 算法的每一步都是可行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

  算法设计的要求:正确性、可读性、健壮性、高效性。

  算法效率的分析:可以从时间效率和空间效率两方面进行分析。时间效率指的是算法所耗费的时间;空间效率指的是算法执行过程中所耗费的存储空间,但有时时间效率和空间效率是矛盾的。
  算法时间效率的度量: 算法时间效率可以依据该算法编制的程序在计算机上执行所消耗的时间来度量。有以下三种方法:
    1. 事后统计法:主要通过设计好的测试程序和数据,利用计算机的计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
     缺点: 1. 为了获得不同算法的运行时间必须编写相应程序;
         2. 运行时间严重依赖硬件以及运行时的环境因素;
         3. 算法的测试数据的选取相当困难。
     总结: 事后统计法虽然直观,但是实施困难且缺陷多。

    2. 事前分析估算:在计算机程序编写前,依据统计方法对算法所消耗资源进行估算。
     影响算法效率的主要因素: 1. 算法采用的效率和方法;
                  2. 问题的输入规模;
                  3. 编译器所产生的代码;
                  4. 计算机执行速度。

    3. 大O表示法:算法的时间复杂度通常用大O符号表述,定义为T[n] = O(f(n))。
     总结: 1. 只关注最高次项;
         2. 时间复杂度是指最坏时间复杂度;
         3. 只有常数项记作1。

  算法的空间复杂度并不是计算所有算法所占空间,而是使用辅助空间的大小。

3. 数据结构与算法的区别与联系

  数据结构与算法的区别与联系

  1. 数据结构只是静态的描述了元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法;
  2. 算法是为了解决实际问题而设计的;数据结构是算法需要处理的问题载体;
  3. 数据结构通过算法实现操作,算法根据数据结构设计程序;
  4. 程序=数据结构+算法,数据结构与算法相辅相成。
    原文作者:大彤小忆
    原文地址: https://blog.csdn.net/HUAI_BI_TONG/article/details/116211663
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞