#include"stdio.h"
#include"iostream.h"
#include"windows.h"
#include"string.h"
#define smax 100
typedef struct
{
int row,col;
int value;
}spnode;
typedef struct
{
int rowm,coln,vcount;
spnode data[smax];
}spmatrix;
void create(spmatrix *a)
{
int b=0,i=0;
for(;;)
{cout<<"输入矩阵的行数(<100):";
cin>>a->rowm;
if(a->rowm>100||a->rowm<1)
{
cout<<"输入错误,请重新输入!"<<endl;
continue ;
}
else
break;
}
for(;;)
{cout<<"输入矩阵的列数(不超过20):";
cin>>a->coln;
if(a->coln>20||a->coln<1)
{
cout<<"输入错误,请重新输入!"<<endl;
continue;
}
else
break;
}
a->vcount=0;
cout<<" 下面开始输入非零元"<<endl;
for(;;)
{
cout<<"输入数值所在行数:";
end1:cin>>b;
if(b>a->rowm||b<1)
{
cout<<"输入错误,请重新输入!"<<endl;
goto end1;
}
a->data[i].row=b;
cout<<"输入数值所在列数:";
end2:cin>>b;
if(b>a->coln||b<1)
{
cout<<"输入错误,请重新输入!"<<endl;
goto end2;
}
a->data[i].col=b;
cout<<"元素值:";
cin>>b;
if(b==0)
break;
a->data[i].value=b;
i++;
a->vcount++;
}
cout<<endl<<"输入完毕!"<<endl;
}
void change(spmatrix *a,int b[smax][smax])
{
int i,j;
for(i=0;irowm;i++)
for(j=0;jcoln;j++)
b[i][j]=0;
for(i=0;ivcount;i++)
b[a->data[i].row-1][a->data[i].col-1]=a->data[i].value;
}
void turn(spmatrix *a)
{
int i,j;
int b[smax][smax];
if(a->rowm==0)
cout<<endl<<"没有矩阵,请先创建一个矩阵!"<<endl;
else
{
change(a,b);
cout<<"转置前:"<<endl;
for(i=0;irowm;i++)
{
for(j=0;jcoln;j++)
cout<<" "<<b[i][j]<<"\t";
cout<<endl;
}
cout<<"转置后:"<<endl;
for(i=0;icoln;i++)
{
for(j=0;jrowm;j++)
cout<<" "<<b[j][i]<<"\t";
cout<<endl;
}
}
}
void display(spmatrix *a)
{
int b[smax][3],i,j,k,t;
if(a->rowm==0)
cout<<endl<<"没有矩阵,请先创建一个矩阵!"<<endl;
else
{
b[0][0]=a->rowm;
b[0][1]=a->coln;
b[0][2]=a->vcount;
for(i=1;i<=a->vcount;i++)
{
b[i][0]=a->data[i-1].row;
b[i][1]=a->data[i-1].col;
b[i][2]=a->data[i-1].value;
}
if(a->vcount==1) ;
else
{
for(i=1;ivcount;i++)
for(k=i+1;k<=a->vcount;k++)
{
if(b[i][0]>b[k][0])
{
for(j=0;j<3;j++)
{
t=b[i][j];
b[i][j]=b[k][j];
b[k][j]=t;
}
}
}
}
for(i=0;i<=a->vcount;i++)
{
for(j=0;j<3;j++)
cout<<" "<<b[i][j]<<"\t";
cout<<endl;
}
}
}
void print(spmatrix *a)
{
int i,j;
if(a->rowm==0)
cout<<endl<<"没有矩阵,请先创建一个矩阵!"<<endl;
else
{
int b[smax][smax];
change(a,b);
for(i=0;irowm;i++)
{
for(j=0;jcoln;j++)
cout<<" "<<b[i][j]<<"\t";
cout<<endl;
}
}
}
void find(spmatrix *a)
{
int i,f,k=0;
if(a->rowm==0)
cout<<endl<<"没有矩阵,请先创建一个矩阵!"<<endl;
else
{
cout<<endl<<"请输入要查找的数:";
end5:cin>>f;
if(f==0)
{
cout<<"输入错误,请重新输入!"<<endl;
goto end5;
}
for(i=0;ivcount;i++)
if(f==a->data[i].value)
{
cout<<"找到了,在第"<<a->data[i].row<<"行,第"<<a->data[i].col<<"列!"<<endl;
k++;
}
if(i==a->vcount&&k==0) cout<<endl<<"对不起,没有找到所需查找的数据!"<<endl;
}
}
void del(spmatrix *a)
{
if(a->rowm==0)
cout<<endl<<"没有矩阵,请先创建一个矩阵!"<<endl;
else
{
cout<<"确认删除?(Y/y)";
char b;
cin>>b;
if(b=='Y'||b=='y')
{
for(int i=0;ivcount;i++)
{
a->data[i].value=0;
a->data[i].row=0;
a->data[i].col=0;
}
a->rowm=0;
a->coln=0;
a->vcount=0;
cout<<"删除成功!"<<endl;
}
else cout<<"删除失败!"<<endl;
}
}
void main()
{ char * string[]={" 数据结构研究 功能演示平台 ",//0
"┏━━━━━━━━━━━━━━━━━━━━┓",//1
"┃ 程序信息 ┃",//2
"┠─────┬──────────────┨",//3
"┃设计目的:│ 二维数组稀疏矩阵 ┃",//4
"┠─────┼──────────────┨",//5
"┃程序功能:│ 稀疏矩阵的存储 ┃",//6
"┠─────┼──────────────┨",//7
"┃指导教师:│ 马春江老师 ┃",//8
"┠─────┼──────────────┨",//9
"┃程序设计:│ T523-1-33王娟 ┃",//10
"┠─────┼──────────────┨",//11
"┃设计日期:│ 2007年 5月17日 ┃",//12
"┠─────┴──────────────┨",//13
"┃湖北汽车工业学院电系2007年数据结构双语班┃",//14
"┗━━━━━━━━━━━━━━━━━━━━┛",//15
"┠─────┴──────────────┨",//16
"┃ ┃",//17
"┃ 1: 创建稀疏矩阵 ┃",//18
"┃ 2: 显示稀疏矩阵的存储 ┃",//19
"┃ 3: 稀疏矩阵转置 ┃",//20
"┃ 4: 显示三元组存储 ┃",//21
"┃ 5: 查找矩阵的元素 ┃",//22
"┃ 6:删除稀疏矩阵 ┃",//23
"┃ 0: 退出 ┃",//24
"┠────────────────────┨"};//25
for(int j=0;j<26;j++)
{
cout<<string[j]<<endl;
Sleep(50);
}
spmatrix b;
spmatrix *a=&b;
a->rowm=0;
char i;
for(;;)
{
cout<<"\n请输入数据(0-5)(0退出):";
cin>>i;
if(i=='0')
break;
switch(i)
{
case '1':
create(a);break;
case '2':
print(a);break;
case '3':
turn(a);break;
case '4':
display(a);break;
case '5':
find(a);break;
case '6':
del(a);break;
default:
cout<<"输入有误!"<<endl;
}
}
}