数据结构-邻接表

 求最短路径时使用邻接矩阵,当边数M远小于点数N的平方时,我们称为稀疏图,M相对较大的图称为稠密图。稀疏图会造成内存空间的浪费(使用了N*N矩阵存储),而算法复杂度也与矩阵大小的平方成正比关系,这时使用邻接表可以降低时间复杂度。

有向图邻接表的实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<string.h>

/*
样例输入
 5 4
 1 2 1
 1 3 1
 1 4 1
 2 5 1
*/

typedef struct EdgeNode//边节点
{
	int next_point;
	int weight;
	EdgeNode* next;
}EdgeNode;

typedef struct point
{
	int exist = 0;
	EdgeNode* head = NULL;

}point;//初始值为0.存在节点赋值为1
point point_list[100];//点集



int main() {
	int num_point, num_edge;
	scanf("%d %d", &num_point, &num_edge);//点数 边数


	for (int i = 1; i <=num_point; i++)
	{
		point_list[i].exist = 1;
	}

	int w, vi, vj;
	for (int i = 1; i <= num_edge; i++)//申请内存,建立邻接表
	{

		scanf("%d %d %d", &vi, &vj,&w);
		EdgeNode* e = (EdgeNode*)malloc(sizeof(EdgeNode));
		e->weight = w;
		e->next_point = vj;
		e->next = point_list[vi].head;
		point_list[vi].head = e;
	}

	//读取对应点上相邻的点
	int p;
	scanf("%d", &p);

	if (point_list[p].exist==1)
	{
		EdgeNode* cur = point_list[p].head;
		while (cur!=NULL)
		{
			printf("%d ", cur->next_point);
			cur = cur->next;
		}
	}


	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湿物男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值