1.邻接表的存储方式
(1)是一种顺序存储和链式存储相结合和存储方法
(2)顺序存储用来保存顶点的信息
(3)链式存储用来保存图中边或弧的信息
(4)使用一个一维数组,其中的每一个元素都包含两个域:顶点域(data),和头指针域(firstadj)
(5)邻接表中每一个结点都依附在该顶点的一条边上,称为边结点
(6)边结点包含三个域,邻接点域(adjvex,对应着一维数组的索引号),数据域(inof,存储权值),链域(nextadj,指向于依附于该顶点的下一个边结点)
2.添加顶点
public boolean addVex(E v) {
//判断数组是否满了
if(numOfVexs>=maxNumOfVexs) {
return false;
}
//定义一个顶点
VNode<E> vex = new VNode<E>();
//将添加的元素赋值给顶点vex的data域
vex.data=v;
//将顶点vex存放进一维数组中,且顶点数量加1
vexs[numOfVexs++]=vex;
return true;
}
3.删除顶点
public boolean deleteVex(E v) {
//遍历数组
for(int i=0;i<numOfVexs;i++) {
//判断数组中的顶点是否与参数相同
if(vexs[i].data.equals(v)) {
//如果相同则将该顶点前面的顶点向前移动一步
for(int j=i;j<numOfVexs-1;j++) {
vexs[j]=vexs[j+1];
}
//将数组最后一位元素赋值为空
vexs[numOfVexs-1]=null;
//数组元素个数减1
numOfVexs--;
//创建指针current和previous
ENode current;
ENode previous;
//遍历数组
for(int j=0;j<numOfVexs;j++) {
//判断数组元素vexs[j]的头指针是否为空,如果为空则跳出此次循环
if(vexs[j].firstadj