c[cmark].row = i; c[cmark].col = j; c[cmark].data = Find(b,i,j); cmark++; } } c[0].data = cdata;//最终c的非零元素个数 }
void main(){ triple a[NumVertices+1]; Init(a); cout<<\您输入的三元组:\ Print(a); cout<<\您输入的三元组表示的稀疏矩阵:\ PrintMT(a); cout<<\稀疏矩阵对角元素之和为:\ cout<<\和a相加:\ triple c[20];
Combine(a,a,c);//将a和a相加放进c里面 cout<<\相加后c三元组为:\ Print(c); cout<<\相加后的稀疏矩阵为:\ PrintMT(c); }
十五、设有一个稀疏矩阵:
?04?00??80??00?0?7???00000000000??3001??0000??
5000?0020??6000??0 1、写出三元组顺序表存储表示
2、写出十字链表存储的顺序表示
1. 行 列 元素
6 7 8 6行7列 8 个非零元素 0 1 4 1 3 -3
1 6 1 2 0 8 3 3 5 4 1 -7 4 5 2 5 3 6 2.
.
十六、画出广义表LS=(( ), (e), (a, (b, c, d)))的头尾链表存储结构(类似于教材P70图2-27.9)。 要求:按照教材中的事例画出相应的图形,不需要编程。 其中第一个节点如下:
t 解:
t t t
t a t e t
t
t c t b t
^^^^ ^ d ^
十七、试编写求广义表中原子元素个数的算法。 要求:
1、定义广义表的节点的型; 2、定义广义表的基本操作;
3、定义本题要求的函数int elements(listpointer L);函数返回值为广义表中原子的个数。例如,广义表(a, b, c, d)原子的个数为4,而广义表(a, (a, b), d, e, ((i, j), k))中院子的个数为3。 提示:先利用基本操作Cal(L)获得表头,判断表头是不是原子,再利用基本操作Cdr(L)获得除第一个元素外的其他元素所形成的表L1,利用递归的方法求L1中原子的个数。 递归有问题
#include
//广义表结构的型 struct listnode{ listnode *link;
bool tag;//false表示该结点为原子,true表示结点为指向子表的指针 union{
char data;
listnode *dlink; }element;//共用体 };
typedef listnode *listpointer;
//表头
listpointer Cal(listpointer S){ if (S==NULL) return NULL; else {
listpointer temp; temp->tag=S->tag; temp->link=S->link;
temp->element=S->element; return temp; } }
//表尾
listpointer Cdr(listpointer S){ if (S->link==NULL)
return NULL; else {
listpointer temp;
temp->tag=S->link->tag; temp->link=S->link->link;
temp->element=S->link->element; return temp; } }
int elements(listpointer L){
//如果广义表为空,返回原子个数为零 if(L==NULL) return 0; //如果广义表第一个结点是原子返回其他结点的原子个数+1 if(Cal(L)->tag==false) //表头为原子 return(elements(Cdr(L))+1); else //表头为广义表 return(elements(Cdr(L))); }
void main(){
//建立广义表(a,(b,c),d,e) listpointer A; A->tag=false;
A->element.data='a'; listpointer B; B->tag=false;
B->element.data='b'; listpointer C; C->tag=false; C->link=NULL; C->element.data='c'; B->element.dlink=C; listpointer F; F->tag = true; A->link=F; listpointer D; D->tag=false;
D->element.data='d'; F->link = D; listpointer E;
E->tag=false;
E->element.data='e'; E->link=NULL; B->link=D; D->link=E;
cout<<\广义表的原子元素个数为:\ }
要求:
1、上述作业要求在单独完成;
2、完成后,于规定期限内提交到ftp服务器的相应目录中中,注意,在提交时将所编写的程序统一拷贝到一个Word文件中,文件名格式为“学号+姓名”