十字链表是邻接表和逆邻接表的一种结合,顶点结点和弧结点如图:
这样,求一个顶点的出度,入度都比较方便,一般用来存储有向图,下面便是实现部分了,大体和之前几种存储方式差不多,只是由于存储方式的不同而略有不同而已
crossedList.h
#pragma once
# include<iostream>
# include"vertex.h"
typedef struct _arcNode//弧结点
{
int tailVertex;//弧尾结点
int headVertex;//弧头结点
double info;//弧的信息,比如权重
struct _arcNode *headLink=NULL;//指向弧头相同的弧结点的指针
struct _arcNode *tailLink=NULL;//指向弧尾相同的弧结点的指针
}arcNode;
typedef struct _vertexNode//顶点结点
{
int numOfVertex;//顶点的编号,从0开始
arcNode *firstIn = NULL;//指向弧头相同的链表
arcNode *firstOut = NULL;//指向弧尾相同的链表
}vertexNode;
class crossedList
{
public:
crossedList(int iNumOfVertex, int iNumOfArc);//构造函数
~crossedList();//析构函数
void create();
void setVisitedFalse