数据结构--数组和广义表--创建以十字链表为存储结构的矩阵
来源:互联网 发布:淘宝的nmd是真的吗 编辑:程序博客网 时间:2024/05/12 09:57
在链表中,每个非零元可以用含有5个域的结点来表示,其中i,j,e分别表示非零元的行标,列标,值,向右域right用以链接同一行中的下一个非零元,向下域用以链接同一列中的下一个非零元。同一行中的非零元通过right域链接成一个线性链表,同一列中的非零元通过down域链接成一个线性链表,每个非零元即是某个行链接表中的结点,又是某个列链表中的一个结点,整个矩阵构成了一个十字交叉的链表,故称这样的存储结构为十字链表,可用两个分别存储行链表的头指针和列链表的头指针一维数组表示之。
构造十字链表矩阵的代码如下:
//稀疏矩阵的十字链表存储表示typedef int ElemType;typedef struct OLNode{ int i,j; //行标和列标 ElemType e; struct OLNode *right,*down; OLNode(){ i=j=0; e=0; right=NULL; down=NULL; }}OLNode,*OLink;typedef struct CrossList{ OLink *rhead,*chead; //行和列链表头指针向量基址由CreateSMatrix分配 int mu,nu,tu; //矩阵行数,列数,非零元个数 CrossList(){ rhead=NULL; chead=NULL; mu=nu=tu=0; }}CrossList;Status CreateSMatrix_OL(CrossList &M){ //创建稀疏矩阵M。采用十字链表存储表示 cout<<"please input 'mu','nu','tu' :"; int m,n,t; cin>>m>>n>>t; if(t>m*n) return ERROR; M.mu=m; M.nu=n; M.tu=t; if(!(M.rhead=(OLink*)malloc(M.mu*sizeof(OLink)))) exit(OVERFLOW); if(!(M.chead=(OLink*)malloc(M.nu*sizeof(OLink)))) exit(OVERFLOW); //M.rhead[]=M.chead[]=NULL; //初始化行列头指针向量;各行列链表为空链表 for(int k=0;k<M.mu;++k){ M.rhead[k]=NULL; } for(int k=0;k<M.nu;++k){ M.chead[k]=NULL; } int i,j; ElemType e; for(cin>>i>>j>>e;i!=0;cin>>i>>j>>e){//按任意次序输入非零元 OLNode* p; if(!(p=(OLNode*)malloc(sizeof(OLNode)))) exit(OVERFLOW); p->i=i; p->j=j; p->e=e; //生成结点 if(M.rhead[i]==NULL||M.rhead[i]->j>j){ p->right=M.rhead[i]; M.rhead[i]=p; }else{//寻查在行表中的插入位置 OLNode* q=NULL; for(q=M.rhead[i];(q->right)&&q->right->j<j;q=q->right); p->right=q->right; q->right=p; }//完成行插入 if(M.chead[j]==NULL||M.chead[j]->i>i){ p->down=M.chead[j]; M.chead[j]=p; }else{//寻查在行表中的插入位置 OLNode* q=NULL; for(q=M.chead[j];(q->down)&&q->down->i<i;q=q->down); p->down=q->down; q->down=p; }//完成列插入 } return OK;}int main(){ CrossList m; CreateSMatrix_OL(m); return 0;}
0 0
- 数据结构--数组和广义表--创建以十字链表为存储结构的矩阵
- 数据结构_数组与广义表_矩阵的十字链表存储稀疏矩阵相加
- 数据结构--数组和广义表--以行逻辑链接的顺序表为存储结构的矩阵的基本运算(求矩阵乘积)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表存贮稀疏矩阵的行列值)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表稀疏矩阵的加法)
- 数据结构 - 数组、矩阵、广义表存储
- 数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
- 数据结构:稀疏矩阵的十字链表存储
- 数据结构编程笔记十三:第五章 数组和广义表 稀疏矩阵的压缩存储实现
- 【数据结构】算法7.3 图的存储结构-十字链表
- 数据结构——广义表和十字链表
- 十字链表 稀疏矩阵的数据结构
- 数据结构Java实现——④数组——>稀疏矩阵十字链表存储法
- 稀疏矩阵的十字链表存储
- 稀疏矩阵的十字链表存储
- 稀疏矩阵的十字链表存储
- 稀疏矩阵的十字链表存储
- 稀疏矩阵的十字链表存储
- 网站开发-用php开发论坛专栏-简介及目录
- 超详细mysql left join,right join,inner join用法分析
- android Notification 的使用(锁定通知栏)
- 多选框 checked问题
- 设计师必读的15个响应式网页设计教程
- 数据结构--数组和广义表--创建以十字链表为存储结构的矩阵
- STemWin5.22移植记录一
- 冒泡排序
- TortoiseSVN中分支和合并实践
- Activity之间的值传递
- Search in Rotated Sorted Array
- time 格式
- hdu3586(树形DP+二分,割边)
- POJ1389-Area of Simple Polygons