数据结构与算法1——简单介绍数据结构和算法

本文深入解析数据结构的本质,即数据元素间的关系集合,并探讨其逻辑与物理结构。同时,通过实例比较,阐述算法的重要性及其特性,如输入、输出、有穷性、确定性和可行性。文章还强调了算法设计的正确性、可读性、健壮性及高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是数据结构?

数据结构事实上是这个样子的:
—— 程序设计 = 数据结构 + 算法
—— 再简单的来说数据结构就是关系,没错,就是数据元素之间存在的一种或者多种特定关系的集合。
(比如说人与人之间就有剪不断理还乱的关系。)

二、逻辑结构和物理结构

逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。

  1. 集合结构:
    在这里插入图片描述
  2. 线性结构
    在这里插入图片描述
  3. 树形结构
    在这里插入图片描述
  4. 图形结构
    在这里插入图片描述

物理结构:是指数据的逻辑结构在计算机中的存储形式
实际上研究的就是如何把数据元素存储到计算机的存储器中。
存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。

三、数据元素的存储形式

数据元素的存储结构形式有两种:顺序存储和链式存储。

顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。(比如数组)
在这里插入图片描述
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
在这里插入图片描述
相对于顺序存储结构,链式存储结构不仅要存数据还要存一个指向下一个元素的指针。

四、什么是算法?

打个比方,其实数据结构和算法的关系就比如像好基友一辈子的关系。
在这里插入图片描述
事实上,数据结构和算法也有类似的关系。只谈数据结构,我们可以在很短的时间内就把几种重要的数据结构介绍完。不过听完后,你可能会没有什么感觉,不知道这些数据结构有啥用处。
现在从一个有关从1加到100的小故事作为开端:

int i, sum=0, n=100;
for(i=1; i<=n; i++)
{
	sum = sum +i;
}
printf("%d",sum);

对比下,用高斯算法,我们可以这样写:

int i, sum=0, n=100;
sum = (1+n)*n/2;
printf("%d",sum);

可能以计算机的神速,两个算法都可以秒杀解决掉!但是,如果我们把条件换成1加到1千万,或者1加到1千亿,差距就可想而知了,甚至人脑都可以比电脑算得快。所以一个好的算法是多少的伟大!

所以什么是算法?
——简单说,算法就是你泡妞儿的技巧和方式。

五、算法的特性

  1. 输入
    ——算法具有零个或者多个输入
  2. 输出
    ——算法至少有一个或者多个输出
  3. 有穷性
    ——每个步骤在可接受的时间内完成
  4. 确定性
    ——算法每个步骤都具有确定的含义,不会出现二义性。
  5. 可行性
    ——算法的每一步都必须是可行的。

六、算法设计的要求

尽管算法不唯一,但我们要学习掌握一些好的算法,对我们解决问题都很有帮助!

  1. 正确性:
    ——算法程序没有语法错误。
    ——算法程序对于合法输入能够产生满足要求的输出。
    ——算法程序对于非法输入能够产生满足规格的说明。
    ——算法程序对于故意刁难的测试输入都有满足要求的输出结果。
  2. 可读性
  3. 健壮性
  4. 时间效率高和存储量低
    好的算法犹如老婆,应该具备时间效率高和存储量低的特点。所以在设计算法的时候我们应该尽量思考这两个方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值