源代码——三元组实现稀疏矩阵及其转置

来源:互联网 发布:软件的开发 编辑:程序博客网 时间:2024/05/16 07:07


//三元组数值有一个特点:那就是在不同位置上的行值相同的元素//一定是按照列值升序出现的。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct TRIPLE//三元组成员{int row;int col;int value;}TRIPLE;typedef struct TRIPLE_HEAD//三元组头{int rowCount;int colCount;int elementCount;TRIPLE *values;}TRIPLE_HEAD;TRIPLE_HEAD *initTriple();void destoryTriple(TRIPLE_HEAD *triHd);void showTriple(TRIPLE_HEAD triHd);TRIPLE_HEAD *revange(TRIPLE_HEAD trip);TRIPLE_HEAD *revange(TRIPLE_HEAD trip){TRIPLE_HEAD *ntrip = NULL; //newint t;//tempint *ass;//辅助数组int i;int index;ass = (int *)malloc(sizeof(int)* (trip.colCount + 1));memset(ass, 0, sizeof(int) * (trip.colCount + 1));//数组清零for (i = 0; i < trip.elementCount; i++){//统计列下标+1 的成员 的个数ass[trip.values[i].col + 1]++;}printf("数组ass元素值如下:(列 个数)\n");for (i = 0; i < trip.colCount + 1; i++)printf("%d, %d\n", i, ass[i]);for (i = 1; i < trip.colCount; i++)ass[i] += ass[i - 1];ntrip = (TRIPLE_HEAD *)malloc(sizeof(TRIPLE_HEAD));*ntrip = trip;//交换行列t = ntrip->rowCount;ntrip->rowCount = ntrip->colCount;ntrip->colCount = t;ntrip->values = (TRIPLE *)malloc(sizeof(TRIPLE)* ntrip->elementCount);for (i = 0; i < trip.elementCount; i++){index = ass[trip.values[i].col]++;ntrip->values[index] = trip.values[i];t = ntrip->values[index].col;ntrip->values[index].col = ntrip->values[index].row;ntrip->values[index].row = t;}free(ass);return ntrip;}void showTriple(TRIPLE_HEAD triHd){int i, j, t = 0;printf("\n");for (i = 0; i < triHd.rowCount; i++){for (j = 0; j < triHd.colCount; j++){if (t < triHd.elementCount && i == triHd.values[t].row && j == triHd.values[t].col){printf("%d ", triHd.values[t++].value);}else{printf("0 ");}}printf("\n");}}void destoryTriple(TRIPLE_HEAD *triHd){free(triHd->values);free(triHd);}TRIPLE_HEAD *initTriple(){TRIPLE_HEAD *th;int row;int col;int value;int i;th = (TRIPLE_HEAD *)malloc(sizeof(TRIPLE_HEAD));printf("请输入矩阵的阶数(行 列):");scanf("%d%d", &th->rowCount, &th->colCount);printf("请输入有效元素的个数:\n");scanf("%d", &th->elementCount);th->values = (TRIPLE *)malloc(sizeof(TRIPLE)* th->elementCount);for (i = 0; i < th->elementCount; i++){printf("请输入第%d个元素(行 列 值)(共%d个):", i+1, th->elementCount);scanf("%d%d%d", &row, &col, &value);th->values[i].row = row;th->values[i].col = col;th->values[i].value = value;}return th;}void main(void){TRIPLE_HEAD *trip, *revTrip;trip = initTriple();showTriple(*trip);revTrip = revange(*trip);showTriple(*revTrip);//转置之后的稀疏矩阵destoryTriple(trip);destoryTriple(revTrip);system("pause");}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人坐牢去了房贷怎么办 人死了欠的房贷怎么办 体育生文化没过怎么办 舍友偷了钱没证据怎么办 舍友要一直开空调怎么办 和大学室友相处不愉快怎么办 和舍友三观不合怎么办 室友欠200钱忘了怎么办 和舍友闹矛盾了怎么办 被宿舍人孤立了怎么办 分到一个爱管事的舍友怎么办 添加了村人名录怎么办 打csgo出现卡顿怎么办 csgo创意工坊下载慢怎么办 电脑全是英文死机了怎么办 亿盛国际出金后不到账怎么办 玩游戏的界面很大怎么办电脑 文件缺失导致电脑无法启动怎么办 眼睛里拉出白丝怎么办 脚扭了脚面肿了怎么办 伪音唱歌嗓子疼怎么办 小孩吊水手肿了怎么办 棉质地的裙子起褶子怎么办 孕妇吃了马苋菜怎么办 三非黑人抓住了怎么办 33岁了写字好丑怎么办 裤子熨焦了发亮怎么办 黑裤子熨亮了怎么办 。P手机没有钤声怎么办 处处被小人其欠负怎么办??? 衣服开了一个口怎么办 脸上长痘痘留下的坑怎么办 脸部被打得皮肤怎么办 打脸引起耳朵疼怎么办 被打了耳痛耳鸣怎么办 苹果6视频锁屏怎么办 抠耳朵抠疼了怎么办 图库的相片没了怎么办 遇到打假牌的人怎么办 部队保障卡丢了怎么办 廊坊武警学院取消现役学员怎么办