活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 一键部署Llama3大模型学习机 0代码一键部署,预装最新主流大模型Llama3与StableDiffusion
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【数据结构】第一章——绪论(2)

      首页 知识中心 数据库 文章详情页

      【数据结构】第一章——绪论(2)

      2025-05-14 10:33:31 阅读次数:4

      函数,实现,打印,理解,算法,输入,输出

      【数据结构】第一章——绪论(2)

      前言

      今天我们将继续介绍数据结构第一章的相关内容。 在上一篇中,我们介绍了数据结构的基本概率,简单说明了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。我个人是感觉这些定义有点不好理解,不过没关系,这些内容会随着我们学习的深入而不断提升对它们的理解。下面我们就来看一下第一章的第二部分内容——算法和算法评价。

      算法的基本概念

      定义

      算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。

      理解定义

      对于这个定义我是这样理解的——在C语言中,我们有介绍过函数,在我们用函数编写一个功能时,函数的返回类型、函数名和函数的参数都是在对这个函数进行声明,函数的具体实现是在函数体内完成的,这个实现的过程,我们就可以简单的理解为是算法。下面我举一个最简单的算法:

      //实现打印hello
      int main()
      {
      	printf("hello\n");
      	return 0;
      }

      现在我为了实现打印hello这个功能,我在主函数体内通过调用库函数printf完成了这个功能,那我现在就可以称这个实现这个功能的过程就是实现这个功能的算法。 在这个算法中,它有2个指令——printf和return; 对于这两条指令,它都只有一个操作——打印和返回0;

      算法的5个特性

      那我们现在对算法有了一个初步的了解之后,我们现在来看一下算法又有哪些特性;

      有穷性

      定义

      一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

      理解

      对于有穷性的理解,我的理解就是像死循环这种无法结束的代码就称不上是算法,如下图所示:

      【数据结构】第一章——绪论(2)

      对于这个循环来说,判断条件为1,结果恒为真,代码进入死循环,不断的打印hello,像这种打印的实现就称不上是算法,但是如果我们将它简单修改一下,如下图所示:

      【数据结构】第一章——绪论(2)

      可以看到,我们不管是修改了判断条件也好,还是增加了介绍标志也好,都是在告诉计算机,你现在需要在什么时候停止,等计算机运行到那个停止点时,它就停止不再运行了。也就是说有穷性就是程序能够正常的终止。

      确定性

      定义

      算法中每条指令必须有确切的含义,对于相同的输入只能得到相同的输出。

      理解

      确定性的话我们可以理解为就像数学中的函数一样,自变量与因变量的关系可以是一对一也可以是多对一,但绝不能是一对多这种情况。下面我们来通过计算机语言来描述:

      【数据结构】第一章——绪论(2)

      在这个代码中我们通过判断变量i的值是否为-1来决定是否要继续循环;在循环中则进行了三个功能的实现——输出i的值、输出hello以及输出数组元素,对于个功能的实现如下:

      • 当i的值不为1且i的值也不为2时,我们执行的是一对一的输出,可以看到结果展示每一个输入的值都能得到一个输出,并且同一个输入能得到同一个输出;
      • 当i的值为2时,我们执行的是多对一的输出,这时需要输入第二个变量j,从结果中可以看到当满足i==2这个条件时,不管j的值为多少,我们都能得到hello的打印结果;
      • 当i的值为1时,我们执行的是一对多的输出,我们通过rand函数与srand函数生成随机数使数组的下标随机,在这种情况下同一个i值得到的结果却是截然不同的;

      我们现在从算法确定性的角度来分析,那么对于输出数组元素这个内容的实现显然就不满足算法的确定性;为了实现输出数组元素的功能,我们可以如下进行代码编写:

      【数据结构】第一章——绪论(2)

      像这样编写代码后我们可以看到,对于变量i的每一次输入,我们都能得到一个输出,并且同样的输入对应的是同样的输出,不同的输入对应的是不同的输出,此时输入与输出满足一对一的关系;对于上述这种输入和输出满足一对一关系或者多对一关系的代码,我们就称这样的算法是具有确定性的;

      可行性

      定义

      算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

      理解

      对于可行性我的理解是——我们在算法中的操作过程,都是能够通过计算机语言进行实现的。

      如我想打印内容,我可以通过库函数printf、putchar等等这样的输出函数进行打印;我想输入数据我可以通过scanf、gets等这样的输入函数进行数据的输入; 我想进行加减乘除的运算我可以通过+-*/这些算术操作符实现;

      除了上述这些内容外,只要是我们想实现的功能,都是能够通过相应的计算机语言进行实现的,这就是可行性;

      输入

      定义

      一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

      理解

      对于一个算法而言,我们可以没有输入,如通过printf在屏幕上输出hello world:

      【数据结构】第一章——绪论(2)

      我们也可以只有一个输入,如通过输入给变量a赋值,并在屏幕上以a=%d的形式输出a的值:

      【数据结构】第一章——绪论(2)

      我们还可以有多个输入,如编写一个简单的进行两个数的四则运算的程序:

      【数据结构】第一章——绪论(2)

      从上述例子中我们可以进一步验证这个结论——在一个算法中,可以没有输入,也可以有一个或多个输入;

      输出

      定义

      一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

      理解

      从前面的举例中我们可以看到,不管是最简单的算法——打印hello world也好,还是能够完成四则运算功能的算法也好,它们都有一个共同点——至少有一个输出。也就是说,对一个算法而言,至少要有一个输出,并且如果有输入的话,这些输出是与输入之间存在某种特定关系的;如上述的四则运算,每一个输出都与输入有一个特定的关系:

      在加法中,输出的值是输入值的和;在减法中,输出的值是输入值的差;在乘法中,输出的值是输入值的积; 在除法中,输出的值是输入值的商;

      和、差、积、商这些就是输入与输出之间的特定关系;

      什么是好的算法

      现在我们已经了解了算法的五个特性,那么对一个算法而言,什么样的算法才称的上是好的算法呢?通常情况下,一个好的算法需要达到以下几个目标——正确性、可读性、健壮性、高效率与低存储量需求。这些目标分别是代表什么意思呢?下面我们一起来了解一下

      正确性

      定义

      算法应能够正确地解决求解问题。

      理解

      对于一个算法来说,它应该能正确的来解决问题,就比如我想计算1+1,那这个算法就不能求解的是1*1;

      【数据结构】第一章——绪论(2)

      对于这个算法而言,我们可以看到输出的结果是确定的,我们很好的实现了计算字符串的长度,并将字符串给打印出来,这个算法正确的解决了我们的问题;

      可读性

      定义

      算法应具有良好的可读性,以帮助人们理解。

      理解

      对于一个好的算法,能够让大家很好的理解每一句代码的含义,比如我要实现两个整数的互换:

      【数据结构】第一章——绪论(2)

      在这个代码中我们很容易理解每一句代码的含义,我们在进行输入后,第一次输出的值就是我们输入的值,我们通过第三个变量c来将变量a和b的值进行了互换,之后我们将交换后的值进行了输出。 但是如果我通过下面这种方式来实现的话:

      【数据结构】第一章——绪论(2)

      可以看到,通过位操作符的方式,我们同样可以实现两个整数的互换,但是对于14-16这三行代码来说就不是那么容易理解了,这种方法相比于第一种方法来说,它的可读性就比较差,

      健壮性

      定义

      输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

      理解

      对于健壮性,我们可以通过switch语句来进行理解:

      【数据结构】第一章——绪论(2)

      在这个代码中,我们通过多组输入的方式来进行连续的输入,如果输入的值都为整型,则可以进入循环执行分支语句,但是当输入的值不是整型时,则结束循环打印hello world;

      在switch语句中我们可以通过整型变量的值来进入不同的分支,执行不同的语句,当a的值为1/2/3的任意一个值时,都能打印数字对于的英文次序,当a值为其它值时,则打印err;

      不管是循环也好,还是switch语句也好,都能够对输入的非法数据做出反应,这个就是算法的健壮性,也就是算法不会因为输入非法数据而给出一个莫名其妙的结果;

      高效率和低存储量需求

      定义

      效率指的是算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

      理解

      高效率指的就是算法执行的时间要少,低存储量需求就是算法执行的时候不会占用特别大的内存空间,我们可以通过下面的例子来简单的理解一下:

      【数据结构】第一章——绪论(2)

      在这个例子中我们创建了一个一维整型数组,数组所占空间大小为40个字节; 如果每行代码执行时间为1ms的话,那我们运行完这行代码就需要至少20ms的时间;

      【数据结构】第一章——绪论(2)

      在这个例子中我们创建了一个二维整型数组,数组所占空间大小为48个字节; 如果每行代码执行时间为1ms的话,那我们运行完这行代码就需要至少24ms的时间;

      从这两个例子当中我们可以看到,对于这两个算法而言,肯定是第一个算法要比第二个算法的效率更高,存储量需求更低。所谓的高效率和低存储量需求我们可以简单的理解为——执行时间要少,占用空间内存要小;

      下面有个问题需要我们来探讨一下,我们可以说第一个算法一定是比第二个算法要好吗?

      这个问题我们先保留,在下一篇内容中我们将来好好探讨一下。

      结语

      在这一篇内容中我们介绍了三个内容:

      • 什么是算法——实现一个功能的过程就是算法;
      • 算法的五个特性——有穷性、确定性、可行性、输入和输出;
      • 好的算法需要满足的五个目标——正确性、可读性、健壮性、高效率和低存储量需求;

      内容不算很多,但是这些内容需要我们在接下来的学习中去好好的体会一下。我相信随着学习的不断深入,我们对这些内容肯定会有更加深刻的理解。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_16231477/8464720,作者:蒙奇D索隆,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:30天拿下Rust之字符串

      下一篇:MySQL 复合查询(重点)

      相关文章

      2025-05-19 09:04:44

      js小题2:构造函数介绍与普通函数对比

      js小题2:构造函数介绍与普通函数对比

      2025-05-19 09:04:44
      new , 关键字 , 函数 , 对象 , 构造函数
      2025-05-19 09:04:30

      【Canvas技法】辐射式多道光影的实现

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30
      代码 , 函数 , 实现
      2025-05-19 09:04:22

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22
      使用 , 函数 , 初始化 , 定义 , 对象
      2025-05-19 09:04:14

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      2025-05-19 09:04:14
      动态规划 , 算法
      2025-05-19 09:04:14

      复杂度的OJ练习

      复杂度的OJ练习

      2025-05-19 09:04:14
      代码 , 复杂度 , 思路 , 数组 , 算法
      2025-05-19 09:04:14

      C语言字符函数和字符串函数--(超全超详细)

      C语言字符函数和字符串函数--(超全超详细)

      2025-05-19 09:04:14
      函数 , 字符 , 字符串
      2025-05-19 09:04:14

      《剑指Offer》搜索算法题篇——更易理解的思路~

      《剑指Offer》搜索算法题篇——更易理解的思路~

      2025-05-19 09:04:14
      算法
      2025-05-16 09:15:24

      如何将一串数字用函数的方法倒过来(C语言)

      如何将一串数字用函数的方法倒过来(C语言)

      2025-05-16 09:15:24
      函数 , 数字 , 数组
      2025-05-16 09:15:24

      C语言-------如何打印保留小数点后1,2,..位

      C语言-------如何打印保留小数点后1,2,..位

      2025-05-16 09:15:24
      double , printf , 打印
      2025-05-16 09:15:24

      模拟实现strlen

      模拟实现strlen

      2025-05-16 09:15:24
      strlen , 实现 , 模拟 , 源码
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33564

      阅读量

      5016628

      查看更多

      最新文章

      SQL Server 执行计划3--关联查询

      2025-05-14 10:02:48

      java实现3. 无重复字符的最长子串

      2025-05-13 09:50:17

      MySQL—函数—流程控制函数(基础)

      2025-05-07 09:10:01

      DS初阶:顺序表的实现

      2025-05-07 09:10:01

      MySQL—函数—数值函数(基础)

      2025-05-07 09:10:01

      MySQL—函数—日期函数(基础)

      2025-05-07 09:10:01

      查看更多

      热门文章

      数据结构与算法之四 搜索算法

      2022-11-17 12:37:20

      数据结构算法 简单的面试思考题

      2023-04-25 10:20:57

      MySQL第三课 函数以及时间相关问题

      2023-05-04 09:25:07

      【算法】双指针、位运算、离散化、合并区间

      2023-07-26 08:09:55

      Oracle 12C 使用疑难处理集锦

      2023-07-04 07:09:02

      【算法】静态单链表、双链表、单调栈与单调队列

      2023-07-26 08:09:55

      查看更多

      热门标签

      数据库 mysql 字符串 数据结构 MySQL 算法 redis oracle java sql python 数据 索引 SQL 查询
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      找到字符串中所有字母异位词。 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

      LeetCode:15.三数之和

      【贡献法 组合数学】2063. 所有子字符串中的元音|1663

      给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的

      【leetcode】位运算 - 找不同

      第一章 引言 (数据结构与算法)

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 权益商城
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 权益商城
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号