5.22学习打卡矩阵三元组(上)

 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 }

猜你喜欢

转载自www.cnblogs.com/L1Gd0ng/p/10909060.html