matlab中图和队列

今天很不开心,因为用matlab实现之前自己c++中实现的一部分代码,需要用到几种数据结构,比如图,队列,一时间不知如何下手,几番来回思考,完美的解决了这个问题
1.关于图
图是一种表示节点之间拓扑关系的数据结构,常用的表示方法有邻接矩阵和邻接表,邻接矩阵是空间换时间的做法,鉴于计算机内存的飞速发展,以及我也比较懒,所以就直接在matlab中声明一个

graph = zeros(totalNum, totalNum); % 邻接矩阵

此时,每个元素为0或1,比如graph(i,j)就表示节点i与j是否为邻接关系(也即二者之间有一条边)。
但若是在c++中我是这样实现的

typedef std::map<int, float> Neighbors; //key for 节点序号,value for 节点间边的权重
struct Vertex // 这是节点的定义,它保存的是其邻接节点,这不正是图的本质么,精髓啊
{
   Neighbors neighbors;
};

typedef std::map<int, Vertex>  Vertices; // 表示所有节点,外层直接访问它来获取节点

 2.关于队列
stl中有queue,但matlab里没得啊,脑壳痛,于是想了一下,一开始我是这样实现的

queue = [];
queue(1) = []; % 出队
queue = [queue;val] % 入队

明眼人一看即知,这种实现会很慢,尤其是在对图做广度优先遍历的时候,没办法,发挥我的主观能动性,于是有了以下代码

queue = zeros(totalNum, 1); % 提前分好内存
queue(1) = initialVal; % 初值
queueTop = 1; % 队首
queueBack = 2; % 队尾,实际指向最后一个数的下一个
queue(1) = 0; queueTop = queueTop + 1; % 出队
queue(queueBack) = insertVal; queueBack = queueBack + 1; % 入队

实际上就是搞两个游标指向首尾,多简单,一时间忘了,不过经此一役,以后应该不会忘,哈哈!开心!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值