稀疏矩阵——数据结构
来源:互联网 发布:快捷支付软件 编辑:程序博客网 时间:2024/06/16 19:08
三元组表表示法和十字链表表示法及转置函数;
#include<stdio.h>#include<stdlib.h>#define maxn 100typedef struct //三元组表表示法;{ int row,col; int e;} Triple;typedef struct{ Triple data[maxn+1]; int m,n,len;} TSMatrix;void TransMatrix(int (*a)[10],int (*b)[10],int m,int n) //最基本的转置;{ for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { b[j][i]=a[i][j]; } }}void TransposeTSMatrix(TSMatrix A,TSMatrix *B) //列徐递增转置算法;{ int i,j,k; B->m=A.n; B->n=A.m; B->len=A.len; if(B->len>0) { j=1; for(k=1; k<=A.n; k++) { for(i=1; i<=A.len; i++) { if(A.data[i].col==k) { B->data[j].row=A.data[i].col; B->data[j].col=A.data[i].row; B->data[j].e=A.data[i].e; j++; } } } }}void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B) //一次定位快速转置算法;{ int col,t,p,q; int num[maxn],position[maxn]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len) { for(col=1; col<=A.n; col++) { num[col]=0; } for(t=1; t<=A.len; t++) { num[A.data[t].col]++; } position[1]=1; for(col=2; col<=A.n; col++) { position[col]=position[col-1]+num[col-1]; } for(p=1; p<=A.len; p++) { col=A.data[p].col; q=position[col]; B->data[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e; position[col]++; } }}typedef struct OLNode //十字链表;{ int row,col; int value; struct OLNode *right,*down;} OLNode,*OLink;typedef struct{ OLink *row_head,*col_head; int m,n,len;} CrossList;void CreateCrossList(CrossList *M) //建立十字链表法的稀疏矩阵;{ int m,n,t; OLNode *p,*q; scanf("%d%d%d",&m,&n,&t); M->m=m; M->n=n; M->len=t; if(!(M->row_head=(OLink*)malloc((m+1)*sizeof(OLink)))) return; if(!(M->col_head=(OLink*)malloc((m+1)*sizeof(OLink)))) return; M->row_head=M->col_head=NULL; int i,j,e; for(scanf("%d%d%d",&i,&j,&e); i!=0; scanf("%d%d%d",&i,&j,&e)) { if(!(p=(OLNode*)malloc(sizeof(OLNode)))) return; p->row=i; p->col=j; p->value=e; if(M->row_head[i]==NULL) M->row_head[i]=p; else { q=M->row_head[i]; while(q->right!=NULL&&q->right->col<j) q=q->right; p->right=q->right; q->right=p; } if(M->col_head[j]==NULL) M->col_head[j]=p; else { q=M->col_head[j]; while(q->down!=NULL&&q->down->row<i) q=q->down; p->down=q->down; q->down=p; } }}int main(){ int a[10][10],b[10][10]; int x=0; for(int i=0; i<5; i++) { for(int j=0; j<5; j++) { a[i][j]=x; x++; } } TransMatrix(a,b,5,5); for(int i=0; i<5; i++) { for(int j=0; j<5; j++) { printf("%d ",b[i][j]); } printf("\n"); } TSMatrix A,B,C; A.m=5; A.n=5; x=0; for(int i=1; i<=5; i++) { for(int j=1; j<=5; j++) { x++; A.data[x].row=i; A.data[x].col=j; A.data[x].e=x; } } A.len=x; TransposeTSMatrix(A,&B); printf("%d %d %d\n",(A.data[2].row),(A.data[2].col),(A.data[2].e)); printf("%d %d %d\n\n",(B.data[2].row),(B.data[2].col),(B.data[2].e)); FastTransposeTSMatrix(A,&C); printf("%d %d %d\n",(A.data[2].row),(A.data[2].col),(A.data[2].e)); printf("%d %d %d\n\n",(C.data[2].row),(C.data[2].col),(C.data[2].e)); CrossList L; CreateCrossList(&L); return 0;}
阅读全文
0 0
- 数据结构——稀疏矩阵
- 稀疏矩阵——数据结构
- 数据结构实验10——稀疏矩阵
- 数据结构实践——稀疏矩阵相加
- 数据结构之——稀疏矩阵
- 数据结构——数组—稀疏矩阵及运算
- 数据结构——稀疏矩阵的压缩存储
- 数据结构实践——稀疏矩阵的三元组表示
- C语言数据结构——稀疏矩阵的转置
- 数据结构——稀疏矩阵三元组操作
- 数据结构—稀疏矩阵三元组基础及应用
- 数据结构 稀疏矩阵运算器
- 数据结构--稀疏矩阵
- 数据结构之稀疏矩阵
- [数据结构复习]稀疏矩阵
- 数据结构-稀疏矩阵
- 数据结构-稀疏矩阵
- 【数据结构】稀疏矩阵
- 浅析 Linux 初始化 init 系统,第 2 部分: UpStart
- 主题五 内存管理的艺术----29.动态内存的分配
- OCRmyPDF
- 栈的基本操作
- 递归算法讲解
- 稀疏矩阵——数据结构
- 泛型与通配符详解
- eclipse安装weblogic插件
- 每天学一点Swift----泛型(一)
- java面试之恒生电子①
- bzoj1119: [POI2009]SLO
- Kerberos认证下Sparksql向hive写数据错误
- 【Machine Learning】特征工程之独热编码(One-hot Encoding)
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd