任务1、假设稀疏矩阵A和B均以三元组顺序表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 任务2、有广义表如下所示,A = (a , b ,(c , d),(e , (f , g))),请画出它的孩子兄弟链表。 任务3、基于堆分配存储结构,试设计算法,实现从串S中删除第pos个字符起长度为len的子串,函数声明如下: Status StrDelete(HString &S,int pos,int len)//从串S中删除第pos个字符起长度为len的子串。
时间: 2023-05-27 09:06:56 浏览: 155
矩阵实验-两三元组相加存入第三个
5星 · 资源好评率100%
1.稀疏矩阵相加算法:
```
void SparseMatrixAdd(TSMatrix A, TSMatrix B, TSMatrix& C) {
if (A.mu != B.mu || A.nu != B.nu) {
printf("Error: two matrices have different dimensions.\n");
return;
}
int pa = 1, pb = 1, pc = 1;
while (pa <= A.tu && pb <= B.tu) {
if (A.data[pa].i < B.data[pb].i || (A.data[pa].i == B.data[pb].i && A.data[pa].j < B.data[pb].j)) {
C.data[pc] = A.data[pa];
pa++; pc++;
} else if (A.data[pa].i > B.data[pb].i || (A.data[pa].i == B.data[pb].i && A.data[pa].j > B.data[pb].j)) {
C.data[pc] = B.data[pb];
pb++; pc++;
} else {
if (A.data[pa].e + B.data[pb].e != 0) {
C.data[pc].i = A.data[pa].i;
C.data[pc].j = A.data[pa].j;
C.data[pc].e = A.data[pa].e + B.data[pb].e;
pc++;
}
pa++; pb++;
}
}
while (pa <= A.tu) {
C.data[pc] = A.data[pa];
pa++; pc++;
}
while (pb <= B.tu) {
C.data[pc] = B.data[pb];
pb++; pc++;
}
C.mu = A.mu;
C.nu = A.nu;
C.tu = pc - 1;
}
```
2. 广义表A的孩子兄弟链表:
```
A
/ \
a b
/ \
c d
/ \
e f
\
g
孩子兄弟链表:
A--a--b--c--e--f--g--d
```
3. 从串S中删除第pos个字符起长度为len的子串的算法:
```
Status StrDelete(HString &S, int pos, int len) {
if (pos < 1 || pos > S.length || len < 0 || pos + len - 1 > S.length) {
return ERROR;
}
if (len == 0) {
return OK;
}
int i = pos + len - 1;
while (i < S.length) {
S.ch[pos - 1] = S.ch[i];
pos++; i++;
}
S.ch[S.length - len] = '\0';
S.length -= len;
return OK;
}
```
阅读全文