第2章计算机辅助系统开发基础知识.docVIP

第2章计算机辅助系统开发基础知识.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章计算机辅助系统开发基础知识

第2章 计算机辅助系统开发基础知识 2.1 数据结构 对于软件开发来说,数据结构具有重要的意义,所谓程序可以看作是数据结构+算法。借助数据结构可以采用相对规范的方法将编程对象加以表述。例如,当我们需要在程序中记录一组等高线数据,并要求表达它们之间的相邻关系(这往往是为了在相邻登高线之间建立三角形数字地面模型),可能就需要借助于树型数据结构了:这时我们利用等高线包围的区域相互包含与否的关系,建立树结构。在图2-1中,等高线A包围的区域直接包含了等高线B、D所包围的区域,B包围的区域包 (a) (b) 图2-1 利用树来表示等高线之间的关系 含了C所包围区域,D所包围区域包含了E所包围区域。为此建立如图2-1(b)所示的数据结构。这样,只要在父节点与子节点,以及同级子节点之间进一步判别等高线是否相邻,除此之外的情况是属于绝对不会相邻的。 2.1.1栈 栈就像在一个只打开一端的乒乓球筒中放入乒乓球一样(参见图2-2),先放入的球需要后取出,具有元素的先进后出特性,我们往往利用这一特性实现编程过程中的某些目的。例如,在机场场道设计CAD系统的平面布局设计工作中,由于工作带有试探性质,希望必要时能够放弃一些刚刚完成的操作,以退回原来的某种状态重新开始。这时我们可以将所进行的设计工作(例如增加了一条滑行道)按照完成的先后顺序逐步加入一个信息栈中,当需要退回原来的某一状态时,从栈的顶端逐步取出修改变化情况的信息,一步一步加以恢复。首先恢复的是最后进行的工作,直到达到希望退回的状态为止。当然这种情况下如果栈中已存满了元素,我们需要在栈的另一端打开取出一些元素加以放弃,以腾出一些栈空间,这是一种特殊的取出操作。 清楚了栈的基本工作原理,还需要定义栈的基本数据操作,这样就便于我们确定栈的基本函数。在栈上定义的基本运算一般有: 在内存空间建立一个栈; 检查栈中剩余的容量; 从栈的顶端推入一个元素; 从栈的顶端取出一个元素; 删除一个栈。 除了这些基本运算之外,我们往往需要定义一些辅助运算,以帮助完成一些复杂的操作: 查看栈中最上面一个元素的内容(并不从栈中取出); 从栈的底端删除一个元素。 2.1.2队列 队列的工作方式与栈不同,它像一个两端打开的乒乓球筒(参见图2-3),所有的乒乓球只能从指定的一端放入,而拿出乒乓球则必须在另一端进行,具有先进先出的特性。利用这种特性,我们可以建立一些特殊的数据模型来描述程序所要实现的解决某些问题的过程。例如,当我们采用仿真方法分析一系列交叉口所发生的交通状态时,需要采用分时处理技术分别逐个改变每一个交叉口的状态,同时系统整体环境也在发生着一些具有时间先后次序的情况。这时,我们可以采用如图2-4所示的结构建立计算机处理模型。在该模型中,具有两个层次的队列(我们可以把它们看作是一种信息管道),在上面的层次(称之为环境层次)上,系统环境队列描述存储环境情况的变化事件;在下面层次(称之为交叉口层次)中,每一个交叉口对应于一个信息队列,其中的元素代表外界的一个影响事件。环境层次与交叉口层次之间 的控制机构判定某种环境变化事件将对哪些交叉口产生影响,从而将影响事件元素送入相应的交叉口信息管道之中。计算过程中,计算机将逐个扫描各交叉口并根据从相应信息队列中取出的情况进行必要的处理。 图2-4 交叉口仿真系统控制机构 为具体说明队列的实现方法,在此列举一个程序示例,这是采用C语言编写的程序,如果采用C++可以编写的更加合理,但我们的目的是说明具体算法,采用C语言程序将有助于更多的读者理解。在这一程序中,采用一个队列信息描述头部记录有关的信息,其中包括指向指向记录队列内容内存块起始位置的指针start,指示当前队列头部(出口)位置的参数head,指示当前队列尾部位置的参数tail,记录队列容量的参数size,记录队列每个元素占用内存大小的参数objsize,记录队列中已有元素个数的参数nob。队列中元素存储在建立队列时所申请的内存空间,在这一内存空间上,利用head、tail两个位置参数构成了一个环形内存空间(参见图2-5)。建议读者阅读一下程序清单中 EnterQueue()和GetElementQueue()两个函数。 图2-5环形存储空间队列结构示意 【清单2-1】通用型队列模块的Include文件 /*---------------------------------------------* QUEUE.H *---------------------------------------------*/ #define QUEUE_NAME_LEN 32 typedef struct { char * start; int head; int tail; int size; int n

您可能关注的文档

文档评论(0)

youshen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档