数据机构--二维数组稀疏矩阵问题实…
2015-01-01 21:01
302 查看
#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;
}
}
}
#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;
}
}
}
相关文章推荐
- 数据机构--矩阵问题实现程序代码
- 数据结构关于稀疏矩阵相加问题
- 矩阵的转化问题【行列互换】(稀疏矩阵)
- 【数据结构】——稀疏矩阵转置
- 机构关注的数据治理问题
- 数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
- 数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
- 数据结构作业稀疏矩阵三元组表示
- 看数据结构写代码(20)稀疏矩阵(顺序存储方式)
- 【数据结构】——稀疏矩阵转置
- 数据结构之三元组顺序表实现稀疏矩阵运算(参考整理严蔚敏数据结构)
- 数据结构实验10——稀疏矩阵
- 矩阵的转化问题【行列互换】(稀疏矩阵)
- 数据结构——稀疏矩阵
- 矩阵乘法和二分求阶乘 解线性递推问题(大数据的递推)
- 二维数组__普通矩阵转换为稀疏矩阵
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- 大规模稀疏矩阵的广义特征值问题——CLAPACK, IETL库尝试
- 中小企业需要大数据吗?要解答这个问题,企业(或其他机构)首先要仔细分析清楚自己的信息现状
- [数据结构实验:稀疏矩阵]