您的位置:首页 > 理论基础 > 数据结构算法

数据结构-邻接表 单向

2016-06-28 14:31 471 查看




Adjacencylist.cpp

#include<iostream>
/****************************
*  邻接表
* CopyRight(C)2016-6-28 13:14:32
* 邻接表是邻接矩阵的一种改进
*就像是 数组 和 链表一样 节省一些内存
* (改变指针的指向 就要获得指针的储存空间地址:二级指针)
**********************************/
#define MaxVertexNum 100
using namespace std;
//|

//|边表结点
struct EdgeNode{
int adjvex;
EdgeNode * next;
};
//|顶点表结点
struct VertexNode{
int vertx;
EdgeNode * firstedge;
};
//|定点数组
VertexNode * AdjList[MaxVertexNum];

//=
void CreateAdjacency(int amount)
{
//|创建顶点表
for (int i = 0; i < amount; i++)
{
VertexNode * vertexnode=new VertexNode;
vertexnode->vertx = i;
vertexnode->firstedge = 0;
AdjList[i] = vertexnode;
}
//|创建边表
for (int i = 0; i < amount; i++)
{
int index = -1;
//|
while (1)
{
cout << "请输入与" << i << "定点连接的顶点(-1结束)" << endl;
cin >> index;
if (index == -1)
{	//|跳出当前循环
break;
}
else{
//|找到表的最后一个顶点
VertexNode * tmpNode=AdjList[i];
EdgeNode ** tmpEdge = &(tmpNode->firstedge);
/*************************************\
* CopyRight(C)2016-6-28 12:59:21
*  注意一个多级指针的问题:
*    tmpEdge是指针的地址  就是 指针变量所占空间的地址, EdgeNode * p=new EdgeNode; EdgeNode ** q=&p;
*   *tmpEdge是指针指向的地址  就是 指针变量指向内存的内存地址
*    **tmpEdge 就是指针指向内存的对象 就是tmpNode
**************************************/
while (*tmpEdge != 0)
{
tmpEdge = &((*tmpEdge)->next);
}
EdgeNode * node = new EdgeNode;
node->adjvex = index;
node->next = 0;
*tmpEdge = node;
}
}
}
}
void echoForEach(VertexNode * vertex[],int amount)
{
for (int i = 0; i < amount; i++)
{
VertexNode * tmpNode = vertex[i];
/**********************
*没有头指针 就用二级指针
********************/
EdgeNode ** tmpEdge = &(tmpNode->firstedge);
while (1)
{
if (*tmpEdge == 0) break;

cout << (*tmpEdge)->adjvex << "->";
///|迭代 获取下一个结点的 二级指针
tmpEdge = &((*tmpEdge)->next);
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
int vertexAmount;
cout << "创建多少个定点?" << endl;
cin >> vertexAmount;
CreateAdjacency(vertexAmount);
echoForEach(AdjList, vertexAmount);
cin.get();
while (1);
}
运行结果:

Microsoft Windows [版本 10.0.10586]
(c) 2015 Microsoft Corporation。保留所有权利。

C:\Users\han>cd F:\VisualStudio2013UltimateProjects\adjacencylist\Debug

C:\Users\han>f:

F:\VisualStudio2013UltimateProjects\adjacencylist\Debug>adjacencylist.exe
创建多少个定点?
4
请输入与0定点连接的顶点(-1结束)
1
请输入与0定点连接的顶点(-1结束)
2
请输入与0定点连接的顶点(-1结束)
3
请输入与0定点连接的顶点(-1结束)
-1
请输入与1定点连接的顶点(-1结束)
2
请输入与1定点连接的顶点(-1结束)
3
请输入与1定点连接的顶点(-1结束)
-1
请输入与2定点连接的顶点(-1结束)
-1
请输入与3定点连接的顶点(-1结束)
-1
1->2->3->
2->3->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: