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

#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 517            ",//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;

                   }

         }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值