数据结构主要研究非数值计算问题的程序中的操作对象以及它们之间的关系,不是研究复杂的算法。
- 数据结构是计算机存储、组织数据的方式。
算法是特定问题求解步骤的描述,在计算机中表现为指令的有序序列,算法是独立存在的一种解决问题的方法和思想。
- 对于算法而言,语言并不重要,重要的是思想。
算法和数据结构的区别:
数据结构只是静态的描述了元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法
算法是为了解决实际问题而设计的
数据结构是算法需要处理的问题载体
数据结构与算法相辅相成
一、数据结构中的基本概念
数据:程序的操作对象,用于描述客观事物。
- 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型,如:int、float、char
数据元素:组成数据的基本单元。
数据项:一个数据元素由若干数据项组成。
数据对象:性质相同的数据元素的集合(比如:链表、数组)
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
//声明一个结构体类型
struct MyTeacher { //一种数据类型
char name[32];
char title[32];
int age;
char addr[128];
};
int main(void) {
struct MyTeacher t1; //数据元素
struct MyTeacher tArray[30]; //数据对象
memset(&t1, 0, sizeof(t1));
strcpy(t1.name, "name"); //数据项
strcpy(t1.addr, "addr"); //数据项
strcpy(t1.title, "title"); //数据项
t1.age = 1;
return 0;
}
二、算法特性
- 输入:算法具有0个或者多个输入
- 输出:算法至少有1个或者多个输出
- 有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以再接收的时间内完成
- 确定性:算法中的每一步都有确定的含义,不会出现二义性
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限次数完成
三、算法效率评估
1、怎么判断一个算法的效率?(规则)
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
- 在没有特殊说明时,我们分析的算法的时间复杂度指的都是最坏时间复杂度
- 只有常数项记作 1
- 操作数量的估算可以作为时间复杂度的估算
2、算法空间复杂度
算法的空间复杂度并不是计算所有算法所占的空间,而是使用的辅助空间的大小。