第一章 引言 【数据结构与算法】【精致版】

news2025/4/18 22:53:56

第一章 引言 【数据结构与算法】【精致版】

  • 前言
  • 版权
  • 第一章 引言
    • 三个问题
      • 超市商品问题
      • 人机对弈问题
      • 多岔路口交通灯的管理问题
    • 1.1 数据结构的概念
    • 1.2 数据结构的内容
      • 1.2.1 数据的逻辑结构
      • 1.2.2 数据的存储结构
    • 1.3 算法
      • 1.3.1 算法的概念
      • 1.3.2 算法的评价标准
      • 1.3.3 算法的描述
      • 1.3.4 算法性能分析
        • 1.时间复杂度
        • 2.空间复杂度
  • 习题1
    • 题 6
    • 题9
    • 解6
    • 解9
  • 最后

前言

2023-11-1 20:00:00

以下内容源自《【数据结构与算法】【精致版】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话

第一章 引言

数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。

主要研究数据(特别是非数值型数据) 的组织、存储和运算方法的课程。

计算机科学中的一门综合性的专业基础课。

学会分析数据对象的特征,掌握数据的组织方法和计算机的表示方法,以便为应用所涉及的数据选择适当的逻辑结 构、存储结构及相应算法,初步掌握算法时间及空间分析的 技巧,培养良好的程序设计技能。

学习方法:
学习数据结构,必须经过大量的实践,在实践中体会构 造性思维方法,掌握数据组织与程序设计的技术。
编程没有捷径–“练、练、练”。

三个问题

超市商品问题

请添加图片描述

人机对弈问题

请添加图片描述

多岔路口交通灯的管理问题

请添加图片描述

数据结构
概括:
为在计算机上解决具体问题,应如何对所需的数据/信息及其关系进行组 织,以及如何对它们进行基本操作。
简言之,就是研究数据的组织 方式(结构)及相应的抽象操作。

1.1 数据结构的概念

  1. 数据对象是性质相同的数据元素的集合
  2. 数据结构是指相互存在一种或多种特定关系的数据元素的集合。
    例如表结构(线性关系)、树形结构(一对多的层次关系)、图结构(多对多的任意关系)
    研究问题的一般思路:1.找数据对象 2、找数据结构 3、存储 4、操作

1.2 数据结构的内容

包含三方面内容:数据的逻辑结构、数据的存储结构、数据的运算

1.2.1 数据的逻辑结构

①集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。
②线性结构:结构中的数据元素之间存在着一对一的线性关系。
③树形结构:结构中的数据元素之间存在着一对多的层次关系。
④图状结构.结构中的数据元素之间存在着多对多的任意关系。

1.2.2 数据的存储结构

顺序存储 链式存储

  • 顺序存储的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系
  • 链式存储的特点是借助指针表示数据元素之间的逻辑关系

1.3 算法

1.3.1 算法的概念

  • 算法就是解决问题的一系列操作步骤的集合。
  • 算法的特性:1、有穷性 2、确定性 3、可行性 4、有输入 5、有输出

1.3.2 算法的评价标准

  1. 正确性
  2. 可读性
  3. 健壮性(鲁棒性
  4. 高效率和低存储量需求

1.3.3 算法的描述

一般采用类语言描述算法

1.3.4 算法性能分析

1.时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的“时间复杂度”。
O的数学含义是,若存在两个常量C和n0,当n>n0时,
     |T(n)|<=C|f(n)|
则记作
     T(n)=O(f(n))

算法语句													对应的语句频度
for(i=0;i<n;i++)											n+l
	for(j=0;j<n;j++)										n(n+1{	c[i][j]=0;											n*n
		for (k=0;k<n;k++)									n*n*(n+1)
			c[i][j] =c[i][j] +a[i] [k]*b[k][j];(原操作)		n*n*n
	}
  • 最坏时间复杂度
2.空间复杂度

空间复杂度是指算法在计算机内执行时所需存储空间的度量,记作
S(n)=O(f(n))
算法执行期间所需要的存储空间包括三部分。
①算法程序所占的空间。
②输入的初始数据所占的存储空间。
③算法执行过程中所需要的额外空间。
若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅 助变量所占的额外空间
若所需额外空间相对于输人数据量来说是常数,则称此算法为“原地工作”。
若所需存储量依赖于特定的输人,则通常按最坏情况考虑。

习题1

题 6

  • 6.设n为正整数,请估算以下程序段的时间复杂度。
    (1)
i=1;k=0;
while(i<=n-1)
{	k=k+10*i;
	i++;
}

(2)

i=1;j=0;
while(i+j<=n) 
{	if(i>j) j++ 
  	else i++;
}

(3)

x=n;y=0;/*n>1*/ 
while(x>=(y+1)*(y+1))  
	y++;

(4)

x=91;y=100;
while(y>0)
{	if(x>100)
	{	x=x-10;
		y--;
	}
	else x++;
}

题9

  • 9.算法设计:设计求解下列问题的类C语言算法,并分析其最环情况下的时间复杂度。
    • (1)在数组A[1…n]中查找值为K的元素,若找到则输出其位置i(1<=i<=n),否则输出0作为标志
    • (2)找出数组A[1…n]中元素的最大值和次最大值(本小题以数组元素的比较为标准操作)。

解6

(1)

i=1;k=0;          
while(i<=n-1)     
{	k=k+10*i;     
	i++;          
}

T(n)=O(n)

(2)

i=1;j=0;  			
while(i+j<=n) 		
{	if(i>j) j++ 
  	else i++;
}

T(n)=O(n)

(3)

x=n;y=0;/*n>1*/ 
while(x>=(y+1)*(y+1))  
	y++;

T(n)=O(n^(1/2))
(4)

x=91;y=100;
while(y>0)
{	if(x>100)
	{	x=x-10;
		y--;
	}
	else x++;
}

T(n)=O(1)

解9

9.1 在数组A[1…n]中查找值为K的元素,若找到则输出其位置i(1<=i<=n),否则输出0作为标志

typedef int Type;
int find(Tyde A[],int len Type K){//len等于题中的n+1
	A[0]=K;
	for(i=n;i>-1;i--){
		if(A[i]==K){
		   return i;
	}
	
}

T(n)=O(n)

9.2 找出数组A[1…n]中元素的最大值和次最大值

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

#include<stdio.h>
typedef int Type;
void find(int A[],int n,Type *max1,Type *max2){
	if(A[1]>=A[2]){
		*max1=A[1];
		*max2=A[2];
	}else{
		*max1=A[2];
		*max2=A[1];
	}
	int i;
	
	for(i=3;i<n+1;i++){
		if(A[i]>*max1){
			*max2=*max1;
			*max1=A[i];
		}else if(A[i]>*max2){
			*max2=A[i];
		}
	}


}
int main() {
	Type A[6]={0,1,2,3,4,5};
	Type max1,max2;
	find(A,6,&max1,&max2);
	printf("max1=%d/n",max1);
	printf("max2=%d/n",max2);
	
}

最后

2023-11-1 20:28:53

我们都有光明的未来
不必感谢我,也不必记得我

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GAMP源码阅读:卫星位置钟差计算

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 1、satposs_rtklib()2、ephclk()1. eph2clk()&#xff1a;时钟校正参数&#xff08; a f 0 、 a f 1 、 a f 2 a_{f0}、a_{f1}、a_{f2} af0​、af…

【编程语言发展史】C语言的诞生及其影响

目录 一、C语言的历史背景 二、C语言的设计思想 三、C语言的语法特点 四、C语言的应用领域 五、C语言的影响 六、总结 C语言是一种高级计算机编程语言&#xff0c;它的诞生和发展对计算机科学和软件工程领域产生了深远的影响。本文将详细介绍C语言的诞生及其影响&#xf…

【原创】java+swing+mysql个人理财管理系统设计与实现

摘要&#xff1a; 个人理财管理系统是一款帮助用户有效管理个人财务的软件&#xff0c;本文将详细介绍该系统的设计过程&#xff0c;包括功能模块、数据库设计、界面设计等&#xff0c;系统采用javaswingmysql技术组合。 功能分析&#xff1a; 系统主要提供给管理员、用户使…

C++数据结构算法篇Ⅰ

C数据结构算法篇Ⅰ &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容讲解数据结构中的链表结构 文章目录 C数据…

项目管理之项目质量管理MoSCoW(莫斯科)优先级排序法

项目质量管理是项目管理中至关重要的一环&#xff0c;它贯穿于项目的整个生命周期&#xff0c;包括项目启动、规划、执行、监控和控制。为了确保项目工作的质量&#xff0c;我们需要从多个方面入手&#xff0c;以下是一些关于如何保障项目工作质量管理的内容。 项目产品质量检…

基于SSM的毕业设计项目管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

历年网规上午真题笔记(2016年)

解析:B 嵌入式系统的存储结构采用分级的方法设计,即寄存器组、高速缓冲存储器(Cache)、内存(包括Flash)和外存,它们在存取速度上依次递减,而在存储容量上逐级增加。 解析:C/A ERP是一种面向制作行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系…

poi兴趣点推荐数据集介绍

介绍 foursquare数据集包含2153471个用户&#xff0c;1143092个场所&#xff0c;1021970个签到&#xff0c;27098490个社交关系以及用户分配给场所的2809581评级&#xff0c;我们常用的是根据NYC和TKY都是从该数据集中抽取出来的。 下载地址&#xff1a;https://sites.google.…

橙河网络:海外问卷调查是什么项目?

大家好&#xff0c;我是橙河网络&#xff0c;今天聊一聊海外问卷调查是什么项目&#xff1f; 海外问卷调查并不是一个新行业&#xff0c;早在十几年前就已经有人在做了&#xff0c;但是因为项目的名字里带有“海外”“国外”的字眼&#xff0c;导致很多人直接从字面意思去理解…

敲敲云零代码平台超实用表单设计技巧推荐,分分钟玩转零代码

敲敲云是一个APaaS零代码云平台&#xff0c;帮助企业快速搭建个性化业务应用。用户不需要编码就能够搭建出用户体验上佳的销售、运营、人事、采购等核心业务应用&#xff0c;打通企业内部数据。平台拥有完善的表单引擎、流程引擎、仪表盘等。 有时我们在添加明细表时&#xff0…

【考研数学】概率论与数理统计 —— 第七章 | 参数估计(2,参数估计量的评价、正态总体的区间估计)

文章目录 一、参数估计量的评价标准1.1 无偏性1.2 有效性1.3 一致性 二、一个正态总体参数的双侧区间估计2.1 对参数 μ \mu μ 的双侧区间估计 三、一个正态总体的单侧置信区间四、两个正态总体的双侧置信区间写在最后 一、参数估计量的评价标准 1.1 无偏性 设 X X X 为总…

【银行测试】支付功能、支付平台、支持渠道如何测试?

有朋友提问&#xff1a;作为一个支付平台&#xff0c;接入了快钱、易宝或直连银行等多家的渠道&#xff0c;内在的产品流程是自己的。业内有什么比较好的测试办法&#xff0c;来测试各渠道及其支持的银行通道呢&#xff1f; 作为产品&#xff0c;我自己办了十几张银行卡方便测…

效率提升测试工具开发的思考

本文针对测试部效率提升测试工具开发、管理、维护暴露出来的问题的一些思考以及一些个人改进观点。 写在前面 本文提到的效率提升测试工具不是指的部门中固有的自动化测试工具&#xff0c;这里提到的测试工具统一指测试人员在工作之余自主开发用于期望替代重复、繁琐、耗时的手…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后&#xff0c;执行如下命令 brew install nginx注意&#xff1a;Nginx安装成功后会提示目录位置&#xff1b;每个人的系统可能因为Homebrew的安装位置…

永宏(FATEK)PLC通讯协议

文章目录 背景说明通讯帧通讯数据地址16进制数据元和ASCII的转换永宏通讯协议举例命令码40&#xff08;PLC概略系统状态读取&#xff09;命令码41&#xff08;PLC的RUN/STOP控制&#xff09;命令码42&#xff08;单一个单点运作控制&#xff09;命令码43&#xff08;多个连续单…

【自用】vmware workstation建立主机window与虚拟机ubuntu之间的共享文件夹

1.在windows中建立1个文件夹 在vmware中设置为共享文件夹 参考博文&#xff1a; https://zhuanlan.zhihu.com/p/650638983 2.解决&#xff1a; &#xff08;1&#xff09;fuse: mountpoint is not empty &#xff08;2&#xff09;普通用户也能使用共享目录 参考博文&#x…

Unity Profiler 详细解析(二)

Profiler的主要参数详解 1. Memory Profiler Uesd Total : 当前帧的Unity内存&#xff0c;Mono内存&#xff0c;GfxDriver内存&#xff0c;Profiler内存以及额外内存的总和。 Reserved Total&#xff1a; 系统在当前帧申请的总体物理内存 Total System Memory Usage&#xff1…

ModStartCMS v7.5.0 内外网映射节流,安全使用增强

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

8种按钮设计的常见类型分享

按钮是UI界面的元素之一&#xff0c;可以本能地吸引游客并将其转化为买家。界面中的UI按钮类型包括&#xff1a;CTA按钮、幽灵按钮、下拉按钮、浮动操作按钮、汉堡包按钮、加号按钮、消耗品按钮、共享按钮。 号召性用语按钮 CTA&#xff08;呼叫语言&#xff09;按钮是一种交…

八、ACL访问控制列表实验

拓扑图&#xff1a; 通过某些特定的条件&#xff0c;端口号&#xff0c;ip地址&#xff0c;来限定某些数据包的访问 在这张拓扑图中&#xff0c;使得1.0和2.0能够访问服务器&#xff0c;但是两个网段不能互通 首先根据拓扑图把ip分配完毕&#xff0c; 高级acl命令可以用设置源…