数据逻辑结构包括哪四种模式 C语言二维数组,怎么理解?

[更新]
·
·
分类:行业
1817 阅读

数据逻辑结构包括哪四种模式

C语言二维数组,怎么理解?

C语言二维数组,怎么理解?

相信题主应该明白 C 语言中基本数据类型的变量,例如定义一个 float 型变量:
float a 3.14变量 a 能表示一个数值,但是现实生活中,仅仅使用一个单数值常常是不能完成任务的。更多情况下,需要解决的问题数据类型都是比较复杂的。
一维数组小明班级有 40 名同学,现在考试成绩出来了,要求我们使用 C 语言把它们的成绩从高到低排出来。要用 C 语言解决这个问题,首先要用 C 语言把 40 名同学的成绩表示出来。但是总不可能定义 40 个变量来存储各位同学的成绩吧?
好在 C 语言提供了数组语法,我们定义一个 score 数组用于解决这个问题是非常合适的:
float score[40]score 有 40 个元素,可以表示 40 个同学的成绩。C 语言在内存中开辟一块连续的内存,供 score 使用,这块内存的大小等于 40*sizeof(float) 字节。
二维数组要是现实生活中,所有问题都这么简单就好了,那我只要利用 C 语言的一维数组,就能走遍天下都不怕了。但是事与愿违,哪怕只是一个 9 宫格,一维数组已经不方便描述它了。
难道要定义 3 个一维数组来描述这个 9 宫格?就算可以,要是这个表再大点呢?比如 1000行,1000列呢?更进一步的,要是希望我们使用 C 语言描述笛卡尔二维坐标系,使用一维数组岂不是麻烦死了?
二维坐标系里的坐标怎样表示方便呢?数学中的表示方法就不错,横坐标为 a,纵坐标为 b 的点,写作(a, b)。
为了表述方便,使用 P 表示 9 宫格。如果在 P 中画上坐标轴,那每个格子描述起来就方便了,P(0,0) 0, P(0,1) 1,...
那要是 C 语言也能这么用,表示9宫格就太方便了,对不?实际上,还真可以。请看:
float pos[9][9]
pos[0][0]0
pos[0][1]1几乎与用坐标描述一模一样,这可比用一维数组描述方便多了。类似的,三维数组,四维数组,都有适合使用它们的时候,理解方法也同二维数组相似。
二维数组的内存分配对于人类来说方便的,死板的计算机不一定也这么认为。实际上,C 语言希望“规则”越少越好,它不怕麻烦,就怕“灵活”。
C语言对内存的分配方式,可不会随着人类认为的“维度”变化而变化。它就一种分配内存的方式,不管你是几维数组,分配内存统一按照线性划分。
对于 P[1][2],C语言会将其解释为 P[1*3 2]。计算机最恨的就是“动脑”了,能用一维解决,就绝对不用二维。
而我们人类,最喜欢的就是,怎样方便怎样来。这也算是人与机器的区别吧。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

对现实世界抽象层次的不同,数据模型分为哪两种?各有什么特点?

对现实世界抽象层次的不同,数据模型分为有概念模型和结构模型
在数据库设计中,概念设计使用的是概念数据模型,逻辑设计中使用的是结构数据模型。
概念模型是一种独立于硬件和软件的模型,完全不涉及信息在系统中的表现,只是用来描述某个特定组织所关心的信息结构。这种模型是从用户的观点对数据建模,必须充分反映用户的需求,并得到用户的确认才可定下来。它是现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具,其典型代表是ER模型。
结构模型用于描述数据库的逻辑结构,与DBMS有关。这种模型是从计算机的观点对数据建模。它是现实世界的第二层抽象,是数据库设计人员和应用程序员之间进行交流的工具。其典型代表是层次、网状、关系和面向对象模型。