#include #include #include #include typedef struct ArcCell{ int adj;/*顶点关系类型,用1表示相邻,0表示不相邻*/ }ArcCell,**AdjMatrix;/*邻接矩阵*/ typedef struct type{ char data[3];/*顶点值*/ struct type *next;/*顶点的下一个指针*/ }VertexType; typedef struct{ VertexType *vexs;/*顶点向量*/ AdjMatrix arcs;/*邻接矩阵*/ int vexnum,arcnum;/*图的顶点数和边数*/ }MGraph; /* ****************** */ typedef int Status; #define STACK_INIT_SIZE 50 typedef int ElemType; typedef struct STACK /*定义栈类型*/ { ElemType *base; ElemType *top; int stacksize; int length; }SqStack,*Stack; void InitStack(Stack *S) /*初始化栈*/ { *S=(SqStack *)malloc(sizeof(SqStack)); (*S)->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType)); if(!(*S)->base)exit(-1); (*S)->top=(*S)->base; (*S)->stacksize=STACK_INIT_SIZE; (*S)->length=0; } Status DestroyStack(Stack *S) /* 销毁栈*/ { free((*S)->base); free((*S)); return 1; } Status StackEmpty(SqStack S) /*判断栈空否*/ { if(S.top==S.base) return 1; else return 0; } void Push(Stack *S,ElemType e) /*把数据压入栈*/ { if((*S)->top - (*S)->base>=(*S)->stacksize) { (*S)->base=(ElemType *) realloc((*S)->base, ((*S)->stacksize + 10) * sizeof(ElemType)); if(!(*S)->base)exit(-1); (*S)->top=(*S)->base+(*S)->stacksize; (*S)->stacksize +=10; } *((*S)->top++)=e; ++(*S)->length; } Status Pop(Stack *S,ElemType *e)/*删除栈顶元素*/ { if((*S)->top==(*S)->base) return 0; *e=*((*S)->top-1); --(*S)->length; (*S)->top--; return 1; } /* ******************** */
|