【数据结构】第五章 数组

1.数组的定义

2.实验报告

在这里插入图片描述

3.实验报告

(1)编程实现稀疏矩阵的三元组顺序表示方法及基本操作的实现(建立、输出、转置等)

#include <stdio.h> 
#include <iostream>
using namespace std;
#include <iomanip>
#include <string.h>
#include <malloc.h>
#include <process.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
typedef int Status;

TSMatrix_def.h

#define MAXSIZE 20
typedef int ElemType;
typedef struct{
 int i,j;
 ElemType e;
}Triple;
typedef struct{
 Triple data[MAXSIZE];
 int mu,nu,tu;
}TSMatrix;

main

#include "com_def.h"
#include "TSMatrix_def.h"
Status Craet(TSMatrix &L){
 Triple a;
 cout<<"请输入矩阵的行数:";
 cin>>L.mu;
 cout<<"请输入矩阵的列数:";
 cin>>L.nu;
 int i=0;
 for(i=0;;i++){
  cout<<"请输入该元素的行号:";
  cin>>a.i;
  cout<<"请输入该元素的列号:"; 
  cin>>a.j;
  cout<<"请输入该元素的值:";
  cin>>a.e;
  L.data[i]=a;
  char c='y';
  cout<<"继续输入请输入y(Y),否则退出:";
  cin>>c;
  if(c!='y'&&c!='Y'){
   break;
  }
 }
 L.tu=i+1;
 return OK;
}
Status Transpose(TSMatrix L,TSMatrix &M){//M为L的转置 行是mu i是行 ,快转 
 M.mu=L.nu;
 M.nu=L.mu;
 M.tu=L.tu;
 int col,q;
 int b[L.nu];//第i行有几个元素 
 for(int i=0;i<L.nu;i++) b[i]=0;
 int c[L.nu+1];//这几个元素从哪一个下标开始放 
 for(int i=0;i<L.tu;i++){
  b[L.data[i].j-1]++;
  /*if(L.data[i].e!=0){
   b[L.data[i].j]++;//第j列(转置后为第j行)非零元素个数
  }*/
 }
 c[1]=0;
 for(int i=2;i<=L.nu;i++){
  c[i]=c[i-1]+b[i-2];//算出从第几个开始放 
 }
 for(int i=0;i<L.tu;i++){//i行j列 
  //L.data[i].j
  col=L.data[i].j;
  q=c[col];
  M.data[q].i=L.data[i].j;
  M.data[q].j=L.data[i].i;
  M.data[q].e=L.data[i].e;
  c[col]++;
 }
 /*for(int i=0;i<4;i++){
  cout<<M.data[i].e<<"||";
 }*/
 return OK;
}
int main(int argc, char** argv) {
 TSMatrix L,M;
 Craet(L);
 cout<<"原行:"<<L.mu<<"\t"<<"原列:"<<L.nu<<endl;
 for(int i=0;i<L.tu;i++){
  cout<<"行:"<<L.data[i].i<<"  列:"<<L.data[i].j; 
  cout<<"  元素为:"<<L.data[i].e<<endl;
 }
 Transpose(L,M);
 cout<<"快速转置后:";
 cout<<"现行:"<<M.mu<<"\t"<<"现列:"<<M.nu<<endl;
 for(int x=0;x<M.tu;x++){
  cout<<"行:"<<M.data[x].i<<"  列:"<<M.data[x].j<<"  元素为:"<<M.data[x].e<<endl;
 }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值