邻接表

IE-LAB网络实验室:Cisco CEF浅析

半世苍凉 提交于 2019-12-04 02:56:06
CEF(Cisco Express Forwarding,Cisco特快交换)技术是思科公司推出的一种全新的路由交换方案,它具有良好的交换性能,增强的交换体系结构和极高的包转发速率。 传统路由器的基本作用是路由计算和包转发,通常基于共享存储器体系结构,采用集中式CPU,即单个CPU(或多个CPU,联结成路由器簇)控制共享总线,连接多个接口卡上,接口卡包含简单的队列等结构,与CPU通信,通过共享总线实现数据包转发。随着Internet的快速发展和大量新的服务需求的不断出现,对网络的路由和交换性能提出了更高的要求,要同时提高包转发速率和系统的性能,必须对传统路由器与交换设备的设计体系结构进行改进,并加入一些新的设计方案以完善系统性能。采用CEF技术的交换路由器,在体系结构,路由方式和接口卡性能等方面都有质的改变,特别适用于大业务量的ISP网络的核心层,同时也广泛应用于高速企业网的主干。 CEF有两种模式: (1)集中式: 允许一个路由处理模块运行特快交换,即FIB和邻接表驻留在路由处理模块中,当线路卡不可用或不具备分散CEF交换的功能时,就可使用集中CEF交换模式。 (2)分布式: (一般记作dCEF)允许路由器的多个线路卡(VIP)分别运行特快交换功能,前提是线路是VIP线路卡或GSR线路卡。中央路由处理器完成系统管理/路由选择和转发表计算等功能,并把CEF表分布到单个线路卡

数据结构(二十八)图的五种存储结构

匿名 (未验证) 提交于 2019-12-03 00:39:02
  由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。   多重链表的方式,即以一个数据域和多个指针域组成的结点表示图中的一个结点,尽管可以实现图结构,但是如果各个顶点的度数相差很大,按度数最大的顶点设计结点结构会造成很多存储单元的浪费,而若按每个顶点自己的度数设计不同的结点结构,又带来操作的不变。   图的类型主要有4种:无向图、有向图、无向网和有向网。   图的五种常见的存储结构:领接矩阵、领接表、十字链表、领接多重表和边集数组。   一、领接矩阵    图的领接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一位数组存储图中顶点信息,一个二维数组(称为领接矩阵)存储图中的边或弧的信息。    1.举例 无向图    有向图    带权值的网图      二、邻接表   对于边数相对顶点较少的图,领接矩阵存在对存储空间的极大浪费的。可以考虑对边或弧使用链式存储的方式来避免空间浪费的问题。   领接表是由两部分组成。顶点用一个一维数组存储。而每个顶点的所有领接点构成一个线性表,由于领接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图则称为顶点vi作为弧尾的出边表。    对于有n个顶点和e条边的无向图

邻接表转换成邻接矩阵

匿名 (未验证) 提交于 2019-12-03 00:22:01
#include<string.h> #include<iostream> #include<stdlib.h> using namespace std; const int MaxSize = 100; struct ArcNode { int data; ArcNode *next; }; struct VertexNode { int vertex; ArcNode *firstedge; }; class List { private: int spot, border; int index; VertexNode root[MaxSize]; public: List() { spot = border = index = 0; } ~List() {} void push(int n, int e) { spot = n; border = e; for(int i = 0; i < spot; i++) { root[i].vertex = i; root[i].firstedge = NULL; } int i, j; while(index < border) { cin >> i >> j; ArcNode *s = new ArcNode; s->data = j; s->next = root[i].firstedge; root[i].firstedge

邻接表

匿名 (未验证) 提交于 2019-12-02 23:56:01
数组实现邻接表 思路: 临接表是储存一条边的起点,终点,权重,用数组实现时用srtuct数组e中储存上述内容。 在储存时,我们储存起点的编号和终点的编号。 为了方便的遍历各点,我们还需要储存下一条边的位置。 emmmm非常抽象,我都不知道自己解释的啥玩意。 我们来用图片、代码和实例来说话(原谅我的画风) int head[7], total, n, m; struct edge { int u, v, w; }e[10]; 左边的条条是数组head,储存的是每个点第一个出边在数组e中的位置 右边的框框是数组e,每个格子储存3个元素,u起点,v终点,w权重 我们假设一共有6个点,9条边。 那我们一共就要储存6个点的第一条出边在e中的位置,即head[6+1]注意数组的结尾。 9条边分别储存在数组e中,即e[9+1]结尾同理。 解释完了变量我们开始输入 数据: 6 9 //点数和边数 1 2 1 //u v w w权重这里不多说,最后加上就行 1 3 12 2 3 9 2 4 3 3 5 5 4 3 4 4 5 13 4 6 15 5 6 4 1 2 1 点1连向点2权重为1 我们将head[1]赋值为1,表示点1的第一条出边储存在e[1]中。 那我们第一条边的起点有了,终点2呢? 我们将e[i]的元素u赋值为2,表示这条边的中点为2。 w为权重不解释。v马上解释

TopSort拓扑排序 邻接表 优先队列实现字典序

匿名 (未验证) 提交于 2019-12-02 23:47:01
//TopSort拓扑排序 邻接表 优先队列实现字典序 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<queue> using namespace std; #define inf 0x3f3f3f3f #define why 100005 struct node { int next,to; }a[500005]; int h[why],cnt,n,In[why],ans[why],m; priority_queue<int,vector<int>,greater<int> >q; inline void Add(int x,int y) { cnt++; a[cnt].to=y; a[cnt].next=h[x]; h[x]=cnt; } inline int redn() { int ret=0,f=1; char ch=getchar(); while(!isdigit(ch)) { if(ch=='-')f=-f; ch=getchar(); } while(isdigit(ch)) { ret=ret*10+ch-'0'; ch=getchar(); } return f>0?ret:

邻接表表示图DFS与BFS

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> #include <iostream> #define MAX_VERTEX_NUM 50 using namespace std ; typedef char VerType ; typedef struct ArcNode //定义弧结点所在位置, { int adj ; int info ; ArcNode * next ; } ArcNode ; typedef struct VerNode //定义顶点(顶点数据,顶点所指向第一条弧的指针) { VerType data ; ArcNode * first ; } VerNode ; typedef struct AdjList //图的定义 { VerNode VerNodes [ MAX_VERTEX_NUM ]; //顶点集 int verNum , arcNum ; //顶点数,弧数 } AdjList ; typedef struct Queue //FIFO队列 { int Item [ MAX_VERTEX_NUM ]; int front , rear ; } Queue ; int visited [ MAX_VERTEX_NUM ]; //顶点访问标志数组 //定位某一结点的位置,找不到返回0 int LocateGraph ( AdjList *

图的邻接表表示法

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> #include<iostream> using namespace std; #define MAX_VERTEX_NUM 50 typedef char VertexData; //定义弧结点 typedef struct EdgeNode { int adjvex; //该弧指向顶点的位置 VertexData data; EdgeNode *next; }EdgeNode; //定义表头结点 typedef struct VetexNode { VertexData data; EdgeNode *link; }VetexNode; //定义基于邻接表的图 typedef struct AdjList { int vexNun,arcNun; //定义邻接表的顶点数,弧数 VetexNode vertex[MAX_VERTEX_NUM]; }AdjList; //创建图,包含表头结点的初始化,及表头结点所指向的边链表 void CreateGraph(AdjList *adj,int *n) { int e,s,d; // 定义图的边数, s为边的起始位置(即表头结点序号)d为目的位置(即边链表结点序号) cout<<"输入顶点数(n)和边数(e)\n"; cin>>*n>>e; adj->arcNun=*n; adj

vector,list实现图的邻接表 DFS遍历

匿名 (未验证) 提交于 2019-12-02 23:40:02
版权声明:若想转载,请在显眼的地方附上文章来源。 https://blog.csdn.net/Abudula__/article/details/91459688 图的实现 图的实现有两种方法,一种是邻接矩阵,另一种是邻接表,这两种实现各有各的优缺点,以下给出了邻接表的实现并且DFS遍历的代码实现。 举例 // A simple representation of graph using STL #include<iostream> #include<vector> #include<list> using namespace std; // A utility function to add an edge in an // undirected graph. void addEdge(vector<list<int> >& adj,int i, int j) { adj[i].push_back(j); adj[j].push_back(i); } // A utility function to print the adjacency list // representation of graph void printGraph(vector<list<int> >& adj, int V) { for (int i = 0; i < V; ++i) { cout <<

图的广度优先遍历(邻接表)

匿名 (未验证) 提交于 2019-12-02 23:03:14
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> using namespace std; #define MAX 100 typedef struct EdgeNode// 边表结点 { int adjves;//存储顶点的下标 struct EdgeNode* next;//连接下一个邻点 }EdgeNode; typedef struct VertexNode//顶点表结点 { int ves;//顶点的值 EdgeNode* firstedge;//相连的顶点的值 }VertexNode,AdjList[MAX]; //邻接表 typedef struct { AdjList adjlist; int ves;//顶点 int edge;//边 int book[MAX];//判断是否有被访问过 }MGraph; void createMGraph(MGraph *G) { int i; int start; int end; EdgeNode *e; printf("please input the ves and edge:\n"); scanf("%d%d",&(G->ves),&(G->edge)); //初始化 printf("please input the ves:

邻接表

匿名 (未验证) 提交于 2019-12-02 22:56:40
邻接表顾名思义,就是与邻接矩阵差不多的东西啦。 基本写法: void add ( int x , int y , int z ){ ++ tot ; // 总遍数 son [ tot ]= y ; //该条边指向y节点 nxt [ tot ]= fir [ x ]; //设定x的上一个子节点 w [ tot ]= z ; //权值记录 fir [ x ]= tot ; //更新x的最后一个子节点 } 当然,这只是单向边。 双向边只需这样: add ( x , y , z ); add ( y , x , z ); 对,就这么简单。 QWQ 转载请标明出处: 邻接表 文章来源: 邻接表