1 #include<stdio.h>
2 #include<stdlib.h>
3 #define MaxSize 100
4
5 typedef struct{
6 int i,j;
7 int data;
8 }triple;
9
10 typedef struct{
11 int r,c,num;
12 triple data[MaxSize];
13 }TSMatrix;
14
15
16 //初始化稀疏矩阵
17 void Init_TSMatrix(TSMatrix* T){
18 T = (TSMatrix* )malloc(sizeof(TSMatrix));
19 printf("初始化稀疏矩阵成功\n\n");
20 }
21
22 //设定稀疏矩阵
23 void Set_TSMatrix(TSMatrix* T){
24 TSMatrix* t = T;
25 int i,j,data,r,c;
26 int juNum;
27 printf("请输入矩阵大小“行,列”\n");
28 scanf("%d,%d",&r,&c);
29 printf("(输入时请注意:以行优先输入)\n");
30 t->c = c;
31 t->r = r;
32 while(1){
33 printf("请输入“行,列,整型数值”\n");
34 scanf("%d,%d,%d",&i,&j,&data);
35 if(i<t->data[t->num-1].i || i==t->data[t->num-1].i && j<=t->data[t->num-1].j){
36 printf("输入行列错误,请重新输入\n");
37 continue;
38 }
39 t->data[t->num].i = i;
40 t->data[t->num].j = j;
41 t->data[t->num].data = data;
42 t->num++;
43 printf("\n继续输入?(1.继续\t任意键结束)\n");
44 scanf("%d",&juNum);
45 if(juNum != 1 || t->num >= (r*c)){
46 printf("结束元素设置\n");
47 break;
48 }
49 }
50 }
51
52 //输出所存储的稀疏矩阵
53 void Disp_TSMatrix(TSMatrix *T){
54 TSMatrix* t = T;
55 int k = 0;
56 while(k < t->num){
57 printf("(%d,%d,%d\n)\n",t->data[k].i ,t->data[k].j ,t->data[k].data);
58 printf("---------------\n");
59 }
60 printf("输出稀疏矩阵三元组完成\n\n");
61 }
62
63 //查找矩阵中的三元组
64 void Fin_Triple(int i,int j,TSMatrix* T){
65 printf("该稀疏矩阵中对应行列元素为:");
66 int k = 0;
67 for(int k = 0;k<T->num;k++){
68 if(T->data[k].i == i && T->data[k].j == j)
69 printf("%d\n",T->data[k].data);
70 }
71 printf("0\n");
72 }
73
74 //在稀疏矩阵中增加一个三元组
75 void Add_Triple(triple* tri,TSMatrix* T){
76 int k = T->num-1;
77 while(1){
78 if(T->data[k].i == tri->i && T->data[k].j == tri->j){
79 printf("该行列元素已存在,增加失败\n");
80 break;
81 }
82 else if(T->data[k].i>tri->i || T->data[k].i==tri->i && T->data[k].j>tri->j){
83 T->data[k+1].i = T->data[k].i;
84 T->data[k+1].j = T->data[k].j;
85 T->data[k+1].data = T->data[k].data;
86 k--;
87 }
88 else{
89 T->data[k+1].i = T->data[k].i;
90 T->data[k+1].j = T->data[k].j;
91 T->data[k+1].data = T->data[k].data;
92 T->data[k].i = tri->i;
93 T->data[k].j = tri->j;
94 T->data[k].data = tri->data;
95 printf("三元组增加成功\n");
96 break;
97 }
98 }
99 }