数据结构-邻接表 单向
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->
相关文章推荐
- 为什么要学习数据结构与算法javascript描述
- JavaScript数据结构之集合
- 数据结构(动态树):[国家集训队2012]tree(伍一鸣)
- 数据结构与算法简记:直接插入排序
- 栈与队列--置空/销毁-栈/队列
- 数据结构 稀疏矩阵 重写函数fast_transpose,使其不用两个数组而仅用一个数组存放row_terms和starting_pos
- 栈与队列--获取栈顶/队首数据(并出栈/队)
- 栈与队列--进/出-栈/队
- 线性表-约瑟夫问题(数据结构基础 第2周)
- 栈与队列--判断栈/队列为空/满
- 后缀表达式计算算术表达式
- 栈与队列--创建栈/队列
- 剑指offer-算法和数据结构:查找和排序
- 数据结构与算法学习笔记
- LinkedList源码浅析
- 左偏树介绍
- 数据结构总结
- CodeForces 444C DZY Loves Colors题解
- MySQL源码:索引相关的数据结构
- 《算法竞赛入门经典》 第二章 循环结构程序设计 习题