图的链式存储-邻接表笔记

三个结构体表示邻接表

1.顶点头结点结构体

2.邻接点结构体

3.图的结构体

#include<iostream>
#include<queue>
#include<stack>
using namespace std

#include Maxvertex 50

//顶点结构体
  struct vertex
{
      char name[50];//顶点名字
      struct edgenode * first;  //领接点结构体指针 
 
};
//邻结点结构体
struct edgenode
{
    int pos;//顶点在顶点数组中位置
    struct edgenode *next; //下一邻结点指针
    int  weight;  //结点相关权重
};
//邻接表图结构体
  struct graphlist
{
      vertex head[Maxvertex];  //头结点数组
       int vertexnum;   //顶点数
       int  edgenum;    //边数
};

  int localvertex(graphlist &g, char *name)
{
         for(int i=0;i<g.vertexnum;i++)

          {
               if(strcmp(g.head[i].name,name)==0)
               {
                     return i;
                }
          }
              retuen -1;  //未发现。
}
//创建一个图
void  creategraph(graph &g)
{
  cout<<"输入图的顶点数和边数:顶点 边"<<endl;
cin>>g.vertexnum>>g.edgenum;
cout<<"输入"<<g.vertexnum<<"个顶点的值"<<endl;
for(int i=0;i<g.vertexnum;i++)
{
cin>>g.head[i].name;
g.head[i].first=NULL; //暂无领接点
}
cout<<"输入"<<g.edgenum<<"条边 顶点v1 顶点v2"<<endl;
char v1[50],v2[50];
for(int i=0;i<g.edgenum;i++)
{
cin>>v1>>v2;
int m=localvertex(g,v1); //m为头结点的链表,n是m的邻接点
int n=localvertex(g,v2);
//链表中加邻接点
edgenode *pnew=new edgenode;
//初始化邻接点
pnew->pos=n;//邻接点在顶点数组中的位置
//pnew用头插法添加到头结点的数组第m个元素对应的链表中
pnew->next=g.head[m].first;
g.head[m].first=pnew;
#if 1 //#if 0为有向图,反之为无向图
//以n为头节点的链表,m为邻接点
edgenode* pnew1=new edgenode;
//初始化邻接点
pnew1->pos=m;
pnew1->next=g.head[i].first;
g.head[i].first=pnew1;
#endif
} }
//打印输出图
void printgraphlist(graphlist &g)
{
for(int i=0;i<g.vertexnum;i++)
{
edgenode* pnode=g.head[i].first;
cout<<g.head[i].name<<":";
while(pnode!=NULL)
{
int index=pnode->pos;
cout<<g.head[index].name<<",";
pnode=pnode->next;
}
cout<<endl;
}
cout<<endl;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值