考研有关的数据结构中的图

由于周末参加比赛,所以就两天没有写博客。。。

今天学习图的基本操作

分为有向图和无向图

 图的创建

/*
   初始条件:kind是图的类型,目前有有向图和无向图 两种.
   返回值   :无。---大部分函数都无返回值,是对图的引用进行操作的
*/
void createGraph(Graph *&G,int kind)
{
    if(G) G = NULL;
    G = (Graph *)malloc(sizeof(struct Graph));
    assert(NULL != G);
    for(int i = 0; i < MAX_VERTEX_NUM; ++i)
    {
        G->vertexs[i] = NULL;        //初始化指向顶点的指针为NULL
    }
    G->kind = kind;                    //设置图的种类
    G->vexNum = 0;                    //初始化图中顶点的个数
    G->arcNum = 0;                    //初始化图中弧的个数
}

图的销毁 

/*
   初始条件:G存在
   返回值   :无。---大部分函数都无返回值,是对图的引用进行操作的
*/
void destoryGraph(Graph *&G)
{
    ArchNode *cur,*next;
    if(NULL == G)
        return;
    //遍历顶点
    for(int i = 0; i < G->vexNum; ++i)
    {
        if(!G->vertexs[i])
            continue;
        next = G->vertexs[i]->firstarc;
        cur  = G->vertexs[i]->firstarc;
        while(cur)
        {
            next = cur->nextarc;
            free(cur);
            cur = next;
        }
        G->vertexs[i]->firstarc = NULL;
    }
    free(G);
    G = NULL;
}

向图中添加结点

//向图中增加结点
/*
    初始条件:G存在,data是结点的数据值
*/
void addVertexToGraph(Graph *&G,VertexType data)
{
    if(G->vexNum >= MAX_VERTEX_NUM)
    {
        cout << "Too many vertex!" << endl;
        return ;
    }
    for(int i = 0; i < G->vexNum; ++i)
    {
        if(!G->vertexs[i])
            continue;
        if(G->vertexs[i]->data == data)
        {
            cout << "Already exists!" << endl;
            return;        //不允许重复            
        }
    }
    Vertex *pVeterx;
    pVeterx = (Vertex *)malloc(sizeof(struct Vertex));
    pVeterx->data = data;
    pVeterx->firstarc = NULL;
    G->vertexs[G->vexNum] = pVeterx;
    G->vexNum++;
}

数据结构的学习还是要练习,多做些算法的题,把我基础就行,慢慢自己的实践能力就会增加的,所以我打算后面再分点时间每天做一道数据结构的算法题练练。今天就这样。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值