}
}
voidMatrix:
:
transposs(Matrix&tMatrix)//矩阵的转置
{
tMatrix.m=n;
tMatrix.n=m;
tMatrix.t=t;
if(tMatrix.t)
{
intq=1;
for(intcol=1;col<=n;col++)
for(intp=1;p<=t;p++)
if(data[p].j==col)
{
tMatrix.data[q].i=data[p].j;//对调Ij的值
tMatrix.data[q].j=data[p].i;
tMatrix.data[q].e=data[p].e;
++q;
}
}
}
这个程序通过输入一组包含非0数的坐标与数值来进行一系列的操作但是这个程序中也有很多不足之处,例如要输入两次数值,暂时无法通过一次输入实现两种操作,即输出稀疏矩阵与输出转置后的矩阵
3学习感受:
通过自学习数组让我更加的了解到了学习方法的重要性,认识到了作为一门动手为主的课程:
数据结构中自己动手编程的重要性和自己实现程序的乐趣。
在其中也不可避免的遇到很多错误,有语法上的,还有很多逻辑错误,不过通过查阅书籍和上网搜索都得到了解决。
让我更加深了对自我学习的信心与认识。
B广义表
1学习目标:
掌握广义表的类型定义广义表的存储表示和实现
2学习过程
一般情况下,广义表写成LS=(a1,a2,...,an)其中:
ai或为原子或为广义表。
在线性表的定义中,只限于是单个元素。
而在广义表的定义中,可以是单个元素,也可是广义表,分别称为广义表LS的原子和子表。
习惯上,用大写字母表示广义表的名称,用小写字母表示原子。
广义表是递归定义的线性结构。
广义表的四个特点:
1广义表中的数据元素有相对次序
2广义表的长度为最外层包含的元素个数
3广义表的深度为所含括弧的重数
4广义表可以共享
广义表的基本操作
1InitGList(&L);
2DestroyGList(&L)
3CreateGList(&L,S)
4CopyGList(&T,L)
GListLength(L);GListDepth(L);
GListEmpty(L);GetHead(L);GetTail(L)
遍历
Traverse_GL(L,Visit())
操作结果:
遍历广义表L,用函数Visit处理每个元素
广义表的存储
结点结构:
Typedefenum{ATOM,LIST}Elemtag;
//ATOM==0;原子LIST==1;子表
TypedefstructGLNode{
Elemtagtag;//标志域;公共部分,区分原子和表结点
union
{//原子结点和表结点的联合部分
AtomTypeatom;//atom是原子结点的值域,AtomType由用户定义
structGLNode*hp//表结点的表头指针
};
structGLNode*tp//相当于线性链表的next,指向下一个元素
//结点;
}*Glist;