【数据结构】(邻接表)稀疏矩阵链式存储

在这里插入图片描述

#include < iostream >
#include < cstdlib >           // malloc 必备的头文件 
#define NUM 5  // 矩阵的行数 
using namespace std;

// 每行的单链表结点定义 
typedef struct LNode{

	int data,adj;   // 值,列 (存放信息) 
	struct LNode* next;
}LNode; 

// 邻接表定义
typedef struct{

	LNode** parray;    // 指针数组,存放每行的首地址(m个头结点) 
	int m;  // 行 
	int n;  // 列 
}LinkMatrix; 

void createLinkMatrix(LinkMatrix &M,int p[][5],int row,int col) // 要记得加 & !! 
{

	int e;  // 存放数组a的元素值 
	M.m = row;
	M.n = col;
	M.parray = (LNode**)malloc(row*sizeof(LNode*)); // 为parray分配row个指针
	for(int i=0;i<row;i++){
		M.parray[i] = NULL;  // 初始置空 
	}
	for(int i=0;i<row;i++){
		LNode *q = M.parray[i]; // 初始指向表头,每一行的元素指向新建立的结点,即最后一个元素
		int flag = 1;  // 每行刚开始的标志;
		for(int j=0;j<col;j++){
			if(e = p[i][j]){   // 存在值,建立新结点 
				LNode *s;
				s = (LNode*)malloc(sizeof(LNode));
				s->data = e;  // 值 
				s->adj = j;   // 列 
				s->next = NULL;   // 指针置空 
				if(flag){   // 若为 开头 
					M.parray[i] = s;
					flag = 0;
				}
				else q->next = s;  // 连接 
				q = s; 
			} 
		}
	}
}

void displayLinkMatrix(LinkMatrix M)
{

	for(int i=0;i<M.m;i++){       // 打印每一行 
		LNode* p = M.parray[i];   // p指向每行表头 
		if(p){   // 若每一行的表头不为空 
			while(p){  // 打印 行、列、值 
				cout << '[' << i + 1 << ']' << '[' << p->adj + 1 << ']' << '[' << p->data << ']' << " "; 
				p = p->next;        // i,adj 一开始是下标,所以要 +1 
			}
		}
	    cout<<endl;
	}
}

int main()
{

	int a[][5] = {3, 0, 0, 0, 7,
                      0, 0,-1, 0, 0,
                     -1,-2, 0, 0, 0,
                      0, 0, 0, 0, 0,
                      0, 0, 0, 2, 0};
    LinkMatrix M;              
    createLinkMatrix(M,a,5,5);   // 传每一行的基址           
    displayLinkMatrix(M);   
	return 0;       
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值