起因是老师布置了一个作业,在网上看了下,大家都是用邻接表+栈写的。于是有了个想法,使用十字链表和数组来做,主要是想锻炼一下指针的使用,加强指针的学习。
先放输出结果图
AOE网的建立
任务的完成
鄙人还是学生,认为写的不好请不要喷,发这篇文章也是想养成写博客的习惯,欢迎大佬们在评论区指点一二。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef char Vertextype; //顶点信息类型
typedef int Edgetype; //孤的权重类型
typedef bool Status; //状态值的类型
typedef int SElemType; //栈的类型
//设定状态值
#define OK 1
#define ERROR 0
#define MAX_VERTEX 30 //设定最大顶点数目
#define STACK_INIT_SIZE 10 //栈存储空间初始分配量
#define STACKINCREMENT 2 //栈存储空间分配增量
//定义孤结点
//属性说明:tailvex存放孤尾顶点的序号,headvex存放弧头顶点的序号
// headlink指向弧头相同的下一个孤结点,tailink指向弧尾相同的下一个弧结点
// weight存放当前弧的权重
typedef struct EdgeNode {
int tailvex, headvex;
struct EdgeNode *headlink, *taillink;
Edgetype weight;
}EdgeNode;
//定义顶点结点
//属性说明:data存放当前顶点的信息
// firstin指向以当前顶点为弧头的第一个孤结点,firstout指向以当前顶点为弧尾的第一个弧结点
typedef struct VertexNode {
Vertextype data;
EdgeNode *firstin, *firstout;
}VextexNode;
//定义图
//属性说明:Otglist[]是一个顶点数组
// numVextexes是总顶点数目,numEdges是总孤数
typedef struct GraphOtglist {
VextexNode Otglist[MAX_VERTEX];
int numVextexes, numEdges;
}GraphOtglist;
//定义栈
//属性说明:base是栈底指针,top是栈顶指针,stacksize是当前已分配的存储空间,以元素为单位
typedef struct SqStack {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//==========================================================================================
//函数声明
Status CreatGraph(GraphOtglist &G); //构造带权有向图G
int LocateVex(GraphOtglist G, Vertext