严蔚敏《数据结构》习题(三)
4.23 假设以块链结构作串的存储结构。试编写判别给定串是否具有对称性的算法,并要求算法的时间复杂度为O(StrLength(S))。
Status LS_Symmetry(LString S){
//借助栈完成以块链为存储结构的串的对称性判别,对称返回TRUE,反之FALSE。
IntStack(T);
p = S.head;
i = 0;
for(j = 1;j <= S.curlen;j++){
if(j <= S.curlen / 2) //前半部分入栈
Push(T, p -> ch[i]);
else if(j > (S.curlen + 1) / 2) {
//与后一半出栈比较
Pop(T, e);
if(p -> ch[i] != e)
return FALSE;
}
if(++i == CHUNKSIZE){
//下一个块
p = p->next;
i = 0;
}
}
return TRUE;
}//LS_Symmetry
5.7 设有三对角矩阵( a i j a_{ij} aij) n x n _{nxn} nxn将其三条对角线上的元素逐行地存于数组B[3n-2]中,使得B[k]= a i j a_{ij} aij,求:
(1)用i,j表示k的下标变换公式;
(2)用k表示i,j的下标变换公式。
i,j = 1,2,…,n,即 a i j a_{ij} aij从 a 11 a_{11} a11开始,B[0,…,3n-1]。
k = 2(i - 1) + j -1 - 1 = 2i + j - 3;
i = [ k + 1 3 \frac{k + 1}{3}