数据结构矩阵的基本操作

#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 12500
typedef struct{
    int i,j;
    int e;
}Triple;
typedef struct{
    Triple data[MAXSIZE+1];
    int hang,lie,geshu;
}TS;
void CreatTS(TS &T)
{
    cout<<"请输入矩阵的行数"<<endl;
    cin>>T.hang;
    cout<<"请输入矩阵的列数"<<endl;
    cin>>T.lie;
    cout<<"请输入矩阵的非零元个数"<<endl;
    cin>>T.geshu;
    for(int a=1;a<=T.geshu;a++)
    {
        cout<<"请输入该非零元的行下标"<<endl;
        cin>>T.data[a].i;
        cout<<"请输入该非零元的列下标"<<endl;
        cin>>T.data[a].j;
        cout<<"请输入该非零元的值"<<endl;
        cin>>T.data[a].e;
    }

}
int Destroy(TS &T) 
{
    if(T.geshu==0) return 0;
    T.geshu=0;
    T.hang=0;
    T.lie=0;
    cout<<"矩阵已销毁"<<endl;
}
int xianshi(TS &T)
{
    if(T.geshu==0) 
    {
        cout<<"矩阵不存在"<<endl; return 0;
    }
    int c=1;
    for(int a=1;a<=T.hang;a++)
    {
        
        cout<<endl;
        cout<<endl;
        cout<<"        ";
        for(int b=1;b<=T.lie;b++)
        {
            if(b==T.data[c].j&&a==T.data[c].i)
            {
                cout<<T.data[c].e<<"      ";
                c++;
            }
            else
            cout<<"0"<<"      ";
        }
        cout<<endl;
     }
}
int zhuanzhi(TS &M,TS T)
{
    int q,p;
    M.geshu=T.geshu;
    M.hang=T.lie;
    M.lie=T.hang;
    if(T.geshu){
        q=1;
        for(int col=1;col<=T.lie;col++)
        {
            for(p=1;p<=T.geshu;p++)
            {
                if(T.data[p].j==col)
                {
                    M.data[q].i=T.data[p].j;
                    M.data[q].j=T.data[p].i;
                    M.data[q].e=T.data[p].e;
                    q++;
                }
            }
        }
    }
}
int kuaisu(TS &M,TS T)
{
    M.geshu=T.geshu;
    M.hang=T.lie;
    M.lie=T.hang;
    int geshu[100];
    int weizhi[100];
    int k,q,t;
    for(t=1;t<=T.lie;t++) geshu[t]=0;
    for(t=1;t<=T.geshu;t++) ++geshu[T.data[t].j];
    weizhi[1]=1; 
    for(t=2;t<=T.lie;t++) weizhi[t]=weizhi[t-1]+geshu[t-1];
    for(k=1;k<=T.geshu;k++)
    {
        t=T.data[k].j; q=weizhi[t];
        M.data[q].i=T.data[k].j;
        M.data[q].j=T.data[k].i;
        M.data[q].e=T.data[k].e;
        ++weizhi[t];
    }
}
int show()
{
cout<<"***********************************************"<<endl;
cout<<"**************  1.创建矩阵       **************"<<endl;
cout<<"**************  2.销毁矩阵       **************"<<endl;
cout<<"**************  3.输出矩阵M      **************"<<endl;
cout<<"**************  4.转置矩阵       **************"<<endl;
cout<<"**************  5.快速转置矩阵   **************"<<endl;
cout<<"**************  6.退出           **************"<<endl;
cout<<"***********************************************"<<endl;
}
int main()
{
    int n;
    show();
    TS T;
    TS M;
    int flag=0;
    while(1)
    {
        cout<<"请输入你要进行的操作"<<endl;
        cin>>n;
        if(n==1)
        CreatTS(T);
        if(n==2)
        Destroy(T);
        if(n==3)
        {
            if(flag==0)
            xianshi(T);
            if(flag==1)
            xianshi(M);
            if(flag==2)
            xianshi(M);
        }
        
        if(n==4)
        {
           zhuanzhi(M,T);
           flag=1;    
        }
        if(n==5)
        {
            kuaisu(M,T);
            flag=2;
        }
        if(n==6)
        break;
    }
}
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值