- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
若S=“abcdef”, i=4, T=“kk” 执行strinsert(S,i,T)后,S=“abckkdef” (2)删除运算strdelete(S,i,len) 若S=“abcdefg”, i=3, len=3 执行strdelete(S,i,len)后,S=“abfg” (3)连接运算strconcat(S1,S2) (4)求子串运算substring(S,i,len) 若S=“abcdefg”, i=3, len=2 执行substring(S,i,len) =“cd” 若S=“abc”, i=3, len=2,出错。 算法实现 涉及到回溯。算法实现时,定义两个下标变量i和j,分别指向t和p中当前比较的字符 当t[i]和p[j]相等时,保留t当前下标i不变(便于回溯),而只改变p当前下标j++,且由i+j来取到t中的后续字符t[i+j]继续和p[j]进行比较。 if (p.str[j]==t.str[i+j] ) j++; 遇到不相等时,t下标i才增1。 next的含义 是模式串P中每个字符的属性值。 next[i]表明当Pi?Tr时,下一次将从Pnext[i]与Tr开始后续对应字符的比较。 例如:对于二维数组A[m][n]: a00 a01 ……………a0( n-1) a10 a11 ……………a1( n-1) A = ┋ ┋ ┋ ┋ ┋ ┋ a(m-1)0 a(m-1)1……… a(m-1) (n-1)若将A按行优先存储,其存储顺序为:a00,a01,…… a0(n-1) , a10, a11,…….a1(n-1) ,……a(m-1)0,a(m-1)1,…… a(m-1) (n-1) ;而按列优先存储,其顺序为:a00,a10,…… a(m-1)0 , a01, a11, ……. a(m-1)1,…… a0(n-1) ,..a1(n-1),…… a(m-1) (n-1) 。 对于数组,一旦确定了它的维数和各维的长度,便可以为它分配存储空间;当规定了数组元素的存储次序后,便可根据给定的一组下标值求得相应数组元素的存储位置。 现假设数组中每个元素占用L个存储单元,若考虑按行优先存储方式,则上述A数组中任何一个元素aij的存储位置可以按以下公式确定:address(aij )= address ( a00 ) + ( i×n+j )×L 若考虑按列优先的存储方式,数组中任何一个元素aij存储位置的地址计算公式为:address( aij ) = address ( a00 ) + (j×m +i )×L 多维数组的存储也和二维数组一样,存在两种存储方式:按行优先和按列优先。但由于多维数组中数据元素间的关系较二维数组复杂,因此数据元素的地址计算公式也相对复杂些,但两者所采用的原理是相同的。 以下以三维数组为例,给出三维数组的顺序存储表示及其部分运算的实现。typedef int datatype; /*假设数组元素的值为整型*/typedef struct { datatype *base; /* 数组存储区的首地址指针*/ int index[3]; /* 存放三维数组各维的长度*/ int c[3] /* 存放三维数组各维的ci值*/} array; 1、 数组初始化运算initarray (A, b1, b2, b3) int initarray (array *A, int b1 , int b2, int b3) { int elements; if (b1=0||b2=0||b3=0) return( 0 ); A-index[0]=b1; A-index[1]=b2; A-index[2]=b3; elements = b1 × b2 × b3; A-base=(datatype*)malloc(elements×sizeof(datatype)); if (! (A-base)) return(0); A-c[0]= b2 × b3; A-c[1]= b3; A-c[2]= 1; return(1);} 2、 访问数组元素值的运算value(A,i1,i2,i3,x)int value(array A, int i1 , int i2, int i3; d
文档评论(0)