![](https://csdnimg.cn/release/download_crawler_static/87237217/bg9.jpg)
(2)将顺序串 r 中所有字符按照相反的次序仍存放在 r 中。
(3)从顺序串 r 中删除其值等于 ch 的所有字符。
(4)从顺序串 r1 中第 index 个字符起求出首次与串 r2 一样的子串的起始位置。
(5)从顺序串 r 中删除所有与串 r1 一样的子串。
9. 写一个函数将顺序串 s1 中的第 i 个字符到第 j 个字符之间的字符用 s2 串替换。
[提示]:〔1〕用静态顺序串〔2〕先移位,后复制
10. 写算法,实现顺序串的根本操作 Strpare(s,t)。
11. 写算法,实现顺序串的根本操作 StrReplace(&s,t,v)。
[提示]:
(1) 被替换子串定位〔相当于第 9 题中 i〕
(2) 被替换子串后面的字符左移或右移〔为替换子串准备房间〕
(3) 替换子串入住〔复制〕
(4) 重复上述,直到……
第五章答案
5.2 设有三对角矩阵 A
n×n
,将其三条对角线上的元素逐行的存于数组 B[1..3n-2]中,使得
B[k]=a
ij
,求:〔1〕用 i,j 表示 k 的下标变换公式;〔2〕用 k 表示 i、j 的下标变换公式。
【解答】〔1〕k=2(i-1)+j
(2) i=[k/3]+1, j=[k/3]+k%3 〔[ ]取整,%取余〕
5.4 在稀疏矩阵的快速转置算法 5.2 中,将计算 position[col]的方法稍加改动,使算法只占用
一个辅助向量空间。
【解答】算法〔一〕
FastTransposeTSMatrix(TSMartrix A, TSMatrix *B)
{/*把矩阵 A 转置到 B 所指向的矩阵中去,矩阵用三元组表表示*/
int col,t,p,q;
int position[MAXSIZE];
B->len=A.len; B->n=A.m; B->m=A.n;
if(B->len>0)
{
position[1]=1;
for(t=1;t<=A.len;t++)
position[A.data[t].col+1]++; /*position[col]存放第 col-1 列非零元素的个数, 即
利用 pos[col]来记录第 col-1 列中非零元素的个数*/
/*求 col 列中第一个非零元素在 B.data[ ]的位置,存放在 position[col]中*/
for(col=2;col<=A.n;col++)
position[col]=position[col]+position[col-1];
for(p=1;p<A.len;p++)
{
col=A.data[p].col;
q=position[col];
B->data[q].row=A.data[p].col;
B->data[q].col=A.data[p].row;