1 //public class DataStructure { 2 //----------------------------------------------------------------------顺序队列 3 class Queue{ 4 /*判空: 5 q.rear=q.front; 6 7 **/ 8 /*入队: 9 q.data[q.rear]=x; 10 q.rear=(q.rear+1)% Maxsize; 11 12 **/ 13 /*出队: 14 x=q.data[q.front]; 15 q.front=(q.front+1)% Maxsize; 16 17 **/ 18 /*判满: 19 q.front==q.rear 20 **/ 21 } 22 23 //------------------------------------------------------------------求二叉树高度 24 25 /* 26 Height(Bintree *T){ 27 28 int height1; 29 int height2; 30 if(T==null) return 0; 31 else{ 32 height1=Height(T->lchild); 33 height2=Height(T->rchild); 34 if(height1>height2) return (height1 +1); 35 else{ 36 return (height2 +1); 37 } 38 } 39 } 40 **/ 41 42 //----------------------------------------------------------------------十字链表 43 44 class ArcNode{ 45 /* 46 #define MaxVertexNum 100; 47 //--------------------------------------- 48 typedef struct ArcBox{ 49 int tailvex,headvex; //该弧的尾和头顶点的位置 50 struct ArcBox *hlink; //弧头相同的弧的链域 51 struct ArcBox *tlink;//弧尾相同的弧的链域 52 InfoType *info; //该弧相关信息的指针 53 }ArcNode; 54 55 //--------------------------------------- 56 typedef struct VexNode{ 57 VertexType data; 58 ArcBox *firstin,*firstout;//分别指向该顶点第一条入弧和出弧 59 }VexNode; 60 //--------------------------------------- 61 typedef struct{ 62 VexNode xlist[MaxVertexNum];//表头向量 63 int vexnum,arcnum;//有向图的当前顶点数和弧度 64 }OLGraph; 65 66 Status CreateDG(OLGraph &G){ 67 scanf(&G.vexnum,&G.arcnum,&IncInfo); 68 //IncInfo为0,则各弧不含其他信息 69 for(int i=0;i<G.vexnum;++i){//构造表头向量 70 scanf(&G.xlist[i].data);//输入顶点值 71 G.xlist[i].firstin=NULL; G.xlist[i].firstout=NULL; 72 //初始化指针 73 } 74 for(k=0;k<G.arcnum;++k){//输入各弧并构造十字链表 75 scanf(&v1,&v2);//输入一条弧的始点和终点 76 i=LocateVex(G,v1); j=LocateVex(G,v2); 77 //确定v1和v2在G中位置 78 p=(ArcBox *)malloc(sizeof(ArcBox));//假设有足够空间 79 *p={i,j,G.xlist[j].firstin,G.xlist[i].firstout,NULL} 80 //对弧结点赋值 81 //{tailvex,headvex,hlink,tlimk,info} 82 83 G.xlist[j].firstin=G.xlist[i].firstout=p; 84 //完成在入弧和出弧链头的插入 85 if(IncInfo) Innput(*p ->info);//若弧含有相关信息,则输入 86 } 87 }//CreateDG 88 } 89 **/ 90 }