数据结构与算法(一)--- 数据结构与算法概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yecjl/article/details/84937968

一、数据结构

数据结构是计算机存储、组织数据的方式。(数据结构是指数据与数据之间的关系。)

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

1、逻辑结构

逻辑结构 示意图
1、集合结构 集合结构
2、线性结构 线性结构
3、树形结构 树形结构
4、图形结构 图形结构

2、存储结构

存储结构:保存在计算机里面的结构

存储结构 描述
1、数组     相同类型、若干变量、有序
2、散列表(哈希表) 存储在f(key)
3、链表     非连续、非顺序、链表指针(数据域,指针域)
4、堆栈     先进后出
5、队列     先进先出 、后进后出
6、树        根、结点、叶子;前驱,后继;【e.g.】二叉树
7、图        结点(顶点)、边

二、算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

算法复杂度 描述
1、空间复杂度 运行时占用多少内存
2、时间复杂度 运行时占用多少时间,主要研究关键代码执行次数。表示:O(n) 。

【例】O(n) = n2 + 3n + 100 ==> O(n) = n2
【例】O(n) = n5 + n4 + n ==> O(n) = n5

【例1】

时间复杂度:O(n) = n2

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // TODO do something
    }
}

【例2】

时间复杂度:O(n) = n2 + n + 1 ≈ n2
时间复杂度研究的是n => ∞,所以【例1】和【例2】的时间复杂度是一样的。

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // TODO do something
    }
}

for (int i = 0; i < n; i++) {
    // TODO do something
}

// TODO do something

三、判定程序的好坏

程序 = 数据结构 + 算法
程序好坏 = 空间复杂度 + 时间复杂度 + 【应用场景】

【例1】swap (✔️)

定义一个临时变量实现两个数交换,可读性最好。

public void swap() {
    int a = 5;
    int b = 6;
    int temp = a; // 定义一个临时变量
    a = b;
    b = temp;
}

【例2】swap (×)

节省了一个空间,但是如果是对象,无法实现两个数交换。

public void swap() {
    int a = 5;
    int b = 6;
    a = a + b;
    b = a - b;
    a = a - b;
}

【例3】swap (×)

性能最优,支持对象交换,但是可读性差。适合对内存要求高,比如无人机,跑步机等

public void swap() {
    int a = 5;
    int b = 6;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

猜你喜欢

转载自blog.csdn.net/yecjl/article/details/84937968