数组和基本顺序结构.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数组和基本顺序结构   存储和处理是程序设计的基本矛盾,但是存储中有处理,可以称为基本处理,例如机器指令中的操作码,C语言内部数值类型的运算符,而处理中也有存储,处理的对象主要是存储中的数据,处理的方法是存储中的基本处理。   从它们这种既对立又统一的关系出发,可以清晰地描述出从数组到基本顺序结构的发展。      1 问题的提出      C语言基本类型,如整型、实型、字符型等,都含有对数据的基本操作,任何处理都以这些基本操作为方法,它们是类型的用户,正是在这个意义上我们说,类型是重用的编程工具,程序是对特殊问题的解。   在数组处理中,往数组中插入一个数据、从数组中删除一个数据、查找数组中的一个数据、查看数组中的数据个数等,是经常使用的基本操作,但是这些基本操作并不是数组所固有的、用运算符来表示的、可以重用的处理,它们需要程序员自己来设计,这是“低级”的设计方法。如果这些操作重复掺杂在对数组的应用程序中,就会妨碍针对问题的求解和对算法的分析。以表1为例,这是删除数组的重复数据。阴影部分就是经常使用的关于数组的基本操作。      表1 删除数组中的重复数据      我们要做的是,把对数组的基本操作独立出来,和数组定义“绑”在一起,使其近似一个类型,改进我们对数组的处理方法。   还有,以字符数组为存储空间的C串也远远不能满足需要,这主要表现在两个方面。一是存储C串的数组容量不易确定。串的运算以串为对象,对空间的需求变化很大,例如,字符串的连接就要求第一个字符串的存储空间能容下连接后的字符串。可是存储C串的是静态数组,其大小在编译阶段已确定,运行时无法改变,预留大了难免造成一部分闲置,预留不足可能导致“越界”。二是C串的基本运算函数的功能还不强,像子串连接、子串插入和子串删除等运算还不属于串的基本运算,这使实现像子串查找和替换这样的处理还很困难。   为了弥补C串的不足,我们引入结构串:使用动态字符数组,增强基本函数。结构串的结构如图1。      图1 结构串存储结构      2基本顺序表的设计   数组指针、数组长度和数组中数据元素个数是数组的整体特征,对数组的任何处理都与它们有关。例如,往数组中插入一个数据,需要判断数组空间是否已满,这需要判断数组长度是否等于数组中数据元素个数;插入位置是否合法,这要求插入位置下标不能小于0,也不能大于数据元素个数;插入后数据个数要增一。可是到目前为止,数组作为参数,传递的是数组地址,而数组长度和数据元素个数不含其中,需要单独传递。例如起泡排序:   void Bubble (int *pa,int n); //起泡排序   形参pa指向整型数组,n表示数组中的数据个数。   如果一个算法需要改变数组中的数据个数,就需要以地址传递方式传递这个信息,以便主调函数可以得到改变后的数据个数值。例如表1的删除数组的重复数据:   void Purge(int *pa,int *n); //删除重复数据   往数组中插入一个数据,不仅要以地址传递方式传递数据个数,还要传递数组长度,以便在插入前判断数组是否已满和插入位置是否合法。   如上表明,应该把数组指针、数组长度和数组中数据元素个数这些数组的特征“绑”在一起。一个具体做法是:建立一个结构,包含数组和一个记录数据个数的整型量;为了提高代码复用率,用宏常量表示数组长度;以形式数据类型Type表示数组类型,执行程序时,使用typedef命令将形式数据类型Type与一个具体类型等同起来,这样可以提高代码的复用性。于是我们得到下面的一个取名为SeqList的结构:   typedef char Type;    //将形式数据类型Type等同于字符型   #define MaxSeqSize 100    //宏常量MaxSeqSize表示数组长度   struct SeqList   {    Type data[MaxSeqSize];    //形式数据类型Type表示数组类型    int size; //数据元素个数   };   这是表示数组整体特征的结构,其中数组的大小和类型可以由用户根据需要来设定。为了具体进行讨论,不失一般性,设定数组长度是100,数组类型是字符型。要使这个结构在数组处理中发挥类似语言内部类型的存储的作用,就要使它具备基本处理。不过,语言内部类型的基本处理是用运算符表示的,而结构的基本处理受到C程序语言局限性的限制,还只能用函数来表示,我们称之为基本函数。考虑到运算符的实质是函数即运算符函数(参见上一期“指针和函数”一文),可以把基本函数看作是运算符的推广。   ⑴ 赋初值。对结构的任何操作实际上都是对带有整体特征的数组的操作。结构的0元素其

文档评论(0)

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

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

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档