【数据结构其实真不难】数据结构和算法概述

简介: 【数据结构其实真不难】数据结构和算法概述

什么是数据结构


官方解释:

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关

问题的学科。

大白话:

数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据


数据结构分类


传统上,我们可以把数据结构分为逻辑结构和物理结构两大类。

逻辑结构分类:

逻辑结构是从具体问题中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互

关系分类,也是

我们后面课题中需要关注和讨论的问题。

a. 集合结构:集合结构中数据元素除了属于同一个集合外,他们之间没有任何其他的关系。

微信图片_20220530131526.png

b. 线性结构:线性结构中的数据元素之间存在一对一的关系微信图片_20220530131532.png

c. 树形结构:树形结构中的数据元素之间存在一对多的层次关系微信图片_20220530131537.png

d. 图形结构:图形结构的数据元素是多对多的关系微信图片_20220530131542.png

物理结构分类:

逻辑结构在计算机中真正的表示方式(又称为映像)称为物理结构,也可以叫做存储结构。常见的物理结构有顺序

存储结构、链式存储结构。

顺序存储结构:

把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的 ,比如我们

常用的数组就是顺序存储结构。

微信图片_20220530131839.png

顺序存储结构存在一定的弊端,就像生活中排时也会有人插队也可能有人有特殊情况突然离开,这

时候整个结构都

处于变化中,此时就需要链式存储结构。

链式存储结构:

是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。此时,

数据元素之间并

不能反映元素间的逻辑关系,因此在链式存储结构中引进了一个指针存放数据元素的地址,这样通

过地址就可以找

到相关联数据元素的位置微信图片_20220530131845.png

什么是算法


官方解释:

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法

解决问题的策略

机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

大白话:

根据一定的条件,对一些数据进行计算,得到需要的结果。


算法初体验


在生活中,我们如果遇到某个问题,常常解决方案不是唯一的。

例如从西安到北京,如何去?会有不同的解决方案,我们可以坐飞机,可以坐火车,可以坐汽车,

甚至可以步行,

不同的解决方案带来的时间成本和金钱成本是不一样的,比如坐飞机用的时间最少,但是费用最

高,步行费用最

低,但时间最长。

再例如在北京二环内买一套四合院,如何付款?也会有不同的解决方案,可以一次性现金付清,也可以通过银行做按揭。这两种解决方案带来的成本也不一样,一次性付清,虽然当时出的钱多,压力大,但是没有

利息,按揭虽然

当时出的钱少,压力比较小,但是会有利息,而且 30 年的总利息几乎是贷款额度的一倍,需要多付

钱。

在程序中,我们也可以用不同的算法解决相同的问题,而不同的算法的成本也是不相同的。总体

上,一个优秀的算

法追求以下两个目标:

1. 花最少的时间完成需求;

2.占用最少的内存空间完成需求;

下面我们用一些实际案例体验一些算法。

需求 1 :

计算 1 到 100 的和。

第一种解法:

public static void main(String[] args) { 
    int sum = 0; 
    int n=100; 
    for (int i = 1; i <= n; i++) { 
        sum += i; 
    }
    System.out.println("sum=" + sum); 
}

第二种解法:

public static void main(String[] args) { 
    int sum = 0; 
    int n=100; 
    sum = (n+1)*n/2; 
    System.out.println("sum="+sum); 
}

第一种解法要完成需求,要完成以下几个动作:

1.定义两个整型变量;

2.执行100 次加法运算;

3. 打印结果到控制台;

第二种解法要完成需求,要完成以下几个动作:

1. 定义两个整型变量;

2. 执行 1 次加法运算, 1 次乘法运算,一次除法运算,总共 3 次运算;

3. 打印结果到控制台;

很明显,第二种算法完成需求,花费的时间更少一些。

需求 2 :

计算 10 的阶乘

第一种解法:

public class Test { 
    public static void main(String[] args) { 
    //测试,计算10的阶乘 
    long result = fun1(10); 
    System.out.println(result); 
    }
    //计算n的阶乘 
    public static long fun1(long n){ 
        if (n==1){ 
            return 1; 
        }
    return n*fun1(n-1); 
    }
 }

第二种解法:

public class Test { 
    public static void main(String[] args) { 
    //测试,计算10的阶乘 
    long result = fun2(10); 
    System.out.println(result); 
    }
    //计算n的阶乘 
    public static long fun2(long n){ 
        int result=1; 
        for (long i = 1; i <= n; i++) { 
            result*=i; 
        }
    return result; 
    }
 }

第一种解法,使用递归完成需求, fun1 方法会执行 10 次,并且第一次执行未完毕,调用第二次执

行,第二次执行

未完毕,调用第三次执行 ... 最终,最多的时候,需要在栈内存同时开辟 10 块内存分别执行 10 个 fun1

方法。

第二种解法,使用 for 循环完成需求, fun2 方法只会执行一次,最终,只需要在栈内存开辟一块内存

执行 fun2 方法

即可。

很明显,第二种算法完成需求,占用的内存空间更小


相关文章
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
68 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
162 4
|
12天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
37 2
|
28天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
57 20
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
131 23
|
2月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
76 20
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
82 1
|
2月前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
81 0

热门文章

最新文章