//三元组顺序表存储随机稀疏矩阵的另一种形式, //存储非零元以行为主序时排列的顺序号及元素值 #include <stdio.h> #include <stdlib.h> #include<conio.h> typedef struct abc { int position; int value; }sqlist; int creat(sqlist *A, int t, int *row, int *col) { int i, pos, val; printf("请输入矩阵的行列数:/n"); scanf("%d%d",row,col); printf("请输入矩阵中非零元的顺序号及元素值:/n"); for(i=0;i<t;i++) { scanf("%d%d",&pos,&val); if( pos>0 && pos<=(*row)*(*col) ) { A[i].position=pos; A[i].value=val; } else { printf("输入的顺序号不在矩阵的范围内!!/n"); i--; } } return 1; } int bubble_sort(sqlist *A, int t) { //对顺序号进行冒泡排序 sqlist T; //辅助变量 int i, j; for(i=t-1;i>0;i--) for(j=0;j<i;j++) { if( A[j].position>A[j+1].position ) { T=A[j]; A[j]=A[j+1]; A[j+1]=T; } } return 1; } int output(sqlist *A, int t) { int i; for(i=0;i<t;i++) printf("%d: %d/n",A[i].position,A[i].value); return 1; } int prospect(sqlist *A, int row, int col, int t) { //给定非零元的行列下标,进行查找 int i, j, k; printf("请输入矩阵非零元的行列下标值:/n"); scanf("%d%d",&i,&j); if( i<1 || i>row || j<1 || j>col ) { printf("行列下标输入错误!!/n"); return 0; } for(k=0;k<t;k++) if( A[k].position==(i-1)*col+j ) { printf("%d,%d: %d/n",i,j,A[k].value); return 1; } printf("没有此行列位置的非零元!!/n"); return 0; } int main() { sqlist *A; int n, t, row, col; char choice; do { printf("/t/t+++++++++++++++++++++++++++++++++++++/n/n"); printf("/t/t/t (0) 初始化三元组顺序表/n"); printf("/t/t/t (1) 创建随机稀疏矩阵/n"); printf("/t/t/t (2) 对三元组顺序表进行排序/n"); printf("/t/t/t (3) 输出三元组顺序表/n"); printf("/t/t/t (4) 查找稀疏矩阵中的非零元/n"); printf("/t/t/t (5) 退出/n"); printf("/t/t++++++++++++++++++++++++++++++++++++++/n/n"); printf("/t请输入你的选择!/n"); choice=getche(); printf("/n"); switch(choice) { case '0': { printf("请输入矩阵中非零元的个数:/n"); scanf("%d",&t); A=(sqlist *)malloc( t*sizeof(sqlist) ); printf("初始化成功!!/n"); } case '1': { n=creat(A,t,&row,&col); if(n) printf("创建成功!!/n"); break; } case '2': { n=bubble_sort(A,t); if(n) printf("排序成功!/n"); break; } case '3': { n=output(A,t); if(n) printf("输出成功!/n"); break; } case '4': { n=prospect(A,row,col,t); if(n) printf("查找成功!/n"); else printf("查找失败!/n"); break; } case '5': { break; } default : { printf("输入错误,请按任意键继续!/n"); getche(); break; } } } while(choice!='5'); return 0; }