数据结构三元数组实验报告

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

 

#define MAXSIZE 12500

 

typedef struct {

 int i, j;

 int e;

}Triple;

 

typedef struct {

 Triple data[MAXSIZE + 1];

 int m, n, t;

}Matrix;

 

void create(Matrix& M) {                        

 srand((unsigned)time(NULL));

 printf("您想要输入非零元素的个数6<t<48:");

 scanf("%d", &M.t);

 for (int p = 1; p <= M.t; p++)                     

 {

  M.data[p].i = rand() % 6 + 1;            

  M.data[p].j = rand() % 8 + 1;            

  M.data[p].e = rand() % 100 + 1;          

 }

}

 

/7oid Bubblesort(Matrix& M) {

// if(M.data[])

//}

 

void Bubblesort(Matrix& M)                                      

{

 for (int i = M.t - 1, exchange = 1; i >= 1 && exchange; i--)

 {

  exchange = 0;

  for (int j = 1; j <= i; j++)

  {

   if (M.data[j].i > M.data[j + 1].i)

   {

    M.data[0] = M.data[j];

    M.data[j] = M.data[j + 1];

    M.data[j + 1] = M.data[0];

    exchange = 1;

   }

   else if (M.data[j].i == M.data[j + 1].i && M.data[j].j > M.data[j + 1].j)

   {

    M.data[0] = M.data[j];

    M.data[j] = M.data[j + 1];

    M.data[j + 1] = M.data[0];

    exchange = 1;

   }

 

  }

 }

}

 

void print(Matrix& X) //输出矩阵三元表

{

 printf("三元表为:");

 printf("\n");

 printf("矩阵的行数:");

 for (int k = 1; k <= X.t; k++)

 {

  printf("%d ", X.data[k].i);

 }

 printf("\n");

 printf("矩阵的列数:");

 for (int o = 1; o <= X.t; o++)

 {

  printf("%d ", X.data[o].j);

 }

 printf("\n");

 printf("矩阵的数值:");

 for (int p = 1; p <= X.t; p++)

 {

  printf("%d ", X.data[p].e);

 }

}

 

 

void printf(Matrix& X) //打印矩阵函数

{

 int c = 1;

 for (int a = 1; a <= X.m; a++)

 {

  for (int b = 1; b <= X.n; b++)

  {

   if (c <= X.t && a == X.data[c].i && b == X.data[c].j)

   {

    printf("%4d", X.data[c].e);

    c++;

   }

   else

    printf("%4d", 0);

  }

  printf("\n");

 }

}

 

void transpose(Matrix M, Matrix& T) { //矩阵三元表的转置

 T.m = M.n; T.n = M.m; T.t = M.t;

 int num[15] = { 0 };

 int cpot[15] = { 0 };

 if (T.t)

 {

 

  for (int col = 1; col <= M.n; ++col)

  {

   num[col] = 0;                     

  }

  for (int t = 1; t <= M.t; ++t)

  {

   ++num[M.data[t].j];                    

  }

  //}

  cpot[1] = 1;                                           

  for (int col2 = 2; col2 <= M.n; ++col2) {

   cpot[col2] = cpot[col2 - 1] + num[col2 - 1];

  }

  for (int p = 1; p <= M.t; ++p)

  {

   int col = M.data[p].j;

   int q = cpot[col];

   T.data[q].i = M.data[p].j;

   T.data[q].j = M.data[p].i;

   T.data[q].e = M.data[p].e;

   ++cpot[col];

  }

 }

}

 

 

 

 

 

void main()

{

 Matrix M, T;

 M.m = 6;

 M.n = 8;

 create(M);

 printf("随机生成的");

 print(M);

 Bubblesort(M);                                      

 printf("\n");

 printf("\n");

 printf("按行排序的");

 print(M);

 printf("\n");

 printf("转置前矩阵为:");

 printf("\n");

 printf(M);

 transpose(M, T);

 printf("\n");

 printf("转置后");

 print(T);

 printf("\n");

 printf("转置后矩阵为:");

 printf("\n");

 printf(T);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值