为什么C语言是非形式化的,《数据结构C语言版》——绪论
《数据结构C语言版》——绪论《笔记》
一.基本概念和术语
1.数据,数据元素, 数据项,数据对象
数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的总称。
数据元素:是数据的基本单位,数据元素用于完整地描述一个对象。
数据项:是组成数据元素的,有独立含义的,不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
2.数据结构
数据结构:是相互之间存在的一种或者多种的特定关系的数据元素的集合,换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间的关系。 数据结构包括,逻辑结构和存储结构两个层次。
逻辑结构如下:
逻辑结构
从逻辑上描述数据,它与数据的储存无关,是独立于计算机的。
两个要素:数据元素和关系
根据数据结构之间的关系的不同特性,有如下四类基本结构,它们的复杂程度依次递进
集合结构:数据结构之间除了“属于同一集合”的关系外,没有别的关系。
线性结构:数据结构中的元素存在一对一的相互关系。
树结构:数据结构中的元素存在一对多的相互关系。
图结构(网状结构):数据结构中的元素存在多对多的相互关系。
其中集合结构,树结构,图结构(网状结构)属于非线性结构
树结构可分为:树(具有多个分支的层次结构)和二叉树(具有两个分支的层次结构)
图结构可分为有向图(一种图结构,边是顶点的有序对)和无向图(一种图结构,边是顶点的无序对)。
线性结构包括:
线性表(典型的线性结构)。
栈和队列(具有特殊限制的线性表):数据操作只能在表的一端或两端进行。
字符串(具有特殊限制的线性表):它的数据元素仅由一个字符组成。
数组(线性表的推广):它的数据元素是一个线性表
广义表(线性表的推广):它的数据元素是一个线性表,但不同构,即或者是单元素,或者是线性表。
如下图:
存储结构如下:
数据对象在计算机中的存储表示成为数据的存储结构,也称为物理结构
数据元素在计算机中有两种基本的储存结构:顺序存储结构和链式存储结构。
顺序存储结构: 顺序存储是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系, 通常借助程序设计语言的数组类型来描述。
链式存储结构:顺序存储结构要求所有元素依次存放在一片连续的存储空间内,而链式存储结构,则不需要占据一整块存储空间,只需要给每个结点附加指针字段,用于存放后继元素的存储地址,通常借助于程序设计语言的指针类型来描述。
3.数据类型和抽象数据类型
数据类型:一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。
在C语言中数据类型有:基本类型和构造类型。
抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作,具体包括三部分:数据对象,数据对象上关系的集合,对数据对象的基本操作的集合。
抽象数据类型的定义仅是一组逻辑特性描述,与其在计算内的表示和实现无关。
ADT的形式化定义是三元组:ADT=(D,S,P)
D是数据对象,S是D上的关系集合,P是对D基本操作的集合。
ADT的定义:
ADT 抽象数据类型名{
数据对象:
数据关系:
基本操作:
}ADT 抽象数据类型名
基本操作的定义格式为:
基本操作名(参数表)
初始条件:
操作结果:
4.算法和算法分析:
算法:是对特定问题求解步骤的一种描述,它是指令的有限序列(为了解决某类问题而规定的一个有限长的操作序列)
算法的五个特性:
有穷性:在有限的步骤内正常完成,不能形成无穷循环。
确定性:算法中的每一个步骤都必须有确定的含义,无二义性可以表现。
可行性:算法中描述的操作都是可以执行有限次来实现
输入:有多个或0个输入。
输出:有一个或多个输出。
评价算法优劣的基本准则:
(1)正确性:在合理的数据输人下,能够在有限的运行时间内得到正确的结果。
(2)可读性:应便于人们理解和相互交流,其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易于隐藏错误,且难于调试和修改。
(3)健壮性:当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。
(4)高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效幸高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
算法效率的度量:
算法执行时间需通过依据该算法编制的程序在计算机上运行所消耗的时间来度量.其方法通常有两种:
事后统计法:计算机内部进行执行时间和实际占用空间的统计。
事前分析估算法:求出该算法的一个时间界限函数。(通常采用此类方法)
时间复杂度:
这个玩意比较难描述:博主找到一篇非常好的文章来供大家理解,如下:
关于时间复杂度详见:一套图 搞懂“时间复杂度”
空间复杂度:
是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作:S(n)=O(f(n)) ----------> n为问题的规模(或大小)
该存储空间一般包括三个方面:
指令常数变量所占用的存储空间;
输入数据所占用的存储空间;
辅助(存储)空间
一般地,算法的空间复杂度指的是辅助空间.
一维数组a[n]:空间复杂度 O(n)
二维数组a[n][m]:空间复杂度 O(n*m)
文章最后来几道题加深印象:
以下说法正确的是 ()。
A:数据元素是数据的最小单位
B:数据项是数据的基本单位
C:数据结构是带有结构的各数据项的集合
D:一些表面上很不相同的数据可以有相同的逻辑结构
答案:D
解释:A:数据元素是数据的基本单位
B:数据项是数据的最小单位
C:数据结构是带有结构的各数据元素的集合。
算法分析的目的是()
A:找出数据结构的合理性
B:研究算法中输入和输出的关系
C:分析算法的效率以求改进
D:分析算法的易读性和文档性
答案:C
算法分析的两个主要方面是()
A.空间复杂度和时间复杂度
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
答案:A
以下数据结构中,()是非线性结构
A:树
B:字符串
C:队列
D:栈
答案:A
在数据结构中,从逻辑上可以把数据结构分成()
A:动态结构和静态结构
B:紧凑结构和非紧凑结构
C:线性结构和非线性结构
D:内部结构和外部结构
答案:C
本文同步分享在 博客“计蒙不吃鱼”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
为什么C语言是非形式化的,《数据结构C语言版》——绪论相关推荐
- c语言 静态链表插入排序,数据结构C语言版 表插入排序
西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...
- c语言打印树形图形,数据结构C语言版树形结构.ppt
数据结构C语言版树形结构 St中元素 算法执行的操作 ch AC k=2 , AC 建立E结点,因k=1,将其作为C结点的左孩子结点 E AC C结点进栈,k=1 ( A 建立C结点,因k=2,将其作 ...
- 数据结构c语言课程设计报告,(数据结构c语言课程设计报告.doc
(数据结构c语言课程设计报告 数据结构 课程设计报告 设计题目:迷宫求解 专 业 机电一体化 班 级 08专接本 学 生 学 号 104910252011 指导教师 高在村 完成时间 2011. 5 ...
- c语言编程队列题,数据结构C语言编程 队列.doc
数据结构C语言编程 队列 #include #include #define MAXQSIZE 10 typedef struct { int *base; //存储空间的起始地址,即数组的首地址,即 ...
- 猴子选王c语言链表程序代码,数据结构(C语言)用栈和链表编写猴子选大王程序...
<数据结构(C语言)用栈和链表编写猴子选大王程序>由会员分享,可在线阅读,更多相关<数据结构(C语言)用栈和链表编写猴子选大王程序(3页珍藏版)>请在人人文库网上搜索. 1.i ...
- 数据结构c语言大题答案,数据结构c语言版试题大全(含答案)
if (i*1.0>sqrt(n)) printf \是一素数\ else printf \不是一素数\} (2) sum1(int n) - 9 - { int p=1,sum=0,i; fo ...
- 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf
不必问别人你能做什么,除了你自己,没有人知道.也不必问别人你到底该做什么,除了行 动,没有任何解答. #include #include #include struct students{ char ...
- 数据结构c语言循环队列代码,数据结构C语言实现----循环队列
代码如下: #include #include typedef char ElemType; #define MAXQUEUE 100 typedef struct { ElemType *base; ...
- 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)
2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...
最新文章
- 跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择
- 【javascript位置属性】screen对象
- Petalinux 2017.4安装教程
- U3D sorting layer, sort order, order in layer, layer深入辨析
- java中商业数据计算时用到的类BigDecimal和DecimalFormat
- Cython进阶--用Cython封装Callback函数
- Opencv图像处理之改变颜色空间
- linux中fork()函数具体解释(原创!!实例解说)
- controller 用 map 接收值_一文弄懂apply、map和applymap三种函数的区别
- zend studio使用xdebug调试程序不能单步调试的解决方案
- 因情制宜,建立“适当”的索引
- liunx 下压缩解压zip文件
- linux没有.brashrc文件,Linux 安装 Redis4.0.6
- Nginx学习笔记02——安装部署Nginx
- HTML链接CSS的方法
- 城堡迷阵,51nod1527,贪心
- 数字图像处理第二章----数字图像基础
- 2.淘宝购买行为分析项目——Hive查询、Sqoop的介绍与使用、SQLyog的安装与使用、Superset的概述与安装使用
- 微型计算机在工程实践中作用,【电子技术论文】思维教学中数字电子技术的应用(共2702字)...
- htm显示日期与农历 html,获取当前日期和农历的js代码