您的位置:首页 > 其它

数据机构--二维数组稀疏矩阵问题实…

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;
                  
}
        
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: