关于前向星的数据结构

     数据结构可以选择用前向星的方式存储一个图。前向星的原理是:把图拆分为几个部分:1.用一个堆栈去存储节点的最后一个边;2用另一个堆栈存储节点的最后一个相关联的边;3用一个堆栈来存储2中的边指向的节点,例如 1a2   传参a 返回节点2.

  下边是代码

struct graph{

    typedef vector<int > VI;

    VI info,next,to;

     graph(int n=0,int m=0):to(0),next(0)

{

  info.resize(n);

  next.reserve(m);

  to.reserve(m);

}

int edge_size()//返回边数

{

  return to.size();


}

int vector_size()//得到节点个数

{

  return info.size();


}

void expand(int i)//加入节点

{

if(info.size()<i+1)

{

info.resize(i+1);

}

}

void add(int i,int j)

{

  expand(i),expand(j);

  to.push_back(j);//最后一条边指向的节点

 next.push_back(info(i));//压入上一个边

 info[i]=to.size()-1;//把新的边作为值

}

void delback()

{

int i;

for(i=0;i<info.size();i++)

{

  if(info[i]==to.size()-1)

 {  info[i]=next.back();

  break;

}

}

to.pop_back();

next.pop_back();

}

void clear()

{

  info.clear();//节点数不变,边删除

  next.resize(0);

  to.resize(0);

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值