由于周末参加比赛,所以就两天没有写博客。。。
今天学习图的基本操作
分为有向图和无向图
图的创建
/*
初始条件: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++;
}
数据结构的学习还是要练习,多做些算法的题,把我基础就行,慢慢自己的实践能力就会增加的,所以我打算后面再分点时间每天做一道数据结构的算法题练练。今天就这样。。