首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

80分提问,如何就没有初始化呢

2012-02-13 
80分提问,怎么就没有初始化呢?再次把这个问题拿出来:以邻接表为存储结构创建一个图,如下://DepthFirstSear

80分提问,怎么就没有初始化呢?
再次把这个问题拿出来:
以邻接表为存储结构创建一个图,如下:
//   DepthFirstSearch.cpp   :   定义控制台应用程序的入口点。
//

#include   "stdafx.h "
#include <stdio.h>
#include <stdlib.h>
#define   MAX_VERTEX_NUM   10
typedef   int   ARC_INFO_TYPE;   //弧相关信息类型  
typedef   char   VERTEX_TYPE;   //结点信息类型
typedef   enum{UDG,   DG}GRAPH_TYPE;   //图的类型:无向,有向图
//弧结点(表结点)
typedef   struct   ArcNode{
int   num;     //结点编号
ARC_INFO_TYPE*   info;//弧的其他相关信息,如权值等等
struct   ArcNode*   nextArcNode;//指向下一个表结点的指针
}ArcNode;
//顶点(头节点)
typedef   struct   VNode{
VERTEX_TYPE   data;//顶点的数据
ArcNode*   firstArcNode;//指向第一个弧结点的指针
}VNode,   AdjList[MAX_VERTEX_NUM];//邻接表
//整个图的信息
typedef   struct   ALGraph{
int   vertexNum;//结点个数
int   arcNum;//边或者弧个数
GRAPH_TYPE   kind;
}ALGraph;
//定义全局变量,便于操作
ALGraph   Graph;
AdjList   adjList;
//辅助数组,记录每个顶点是否被访问过
int   visited[MAX_VERTEX_NUM];  
//创建一个图(有向图比较简单,因为它是单向的,无向图在有向图的基础上添加一个弧结点)
int   CreateALGraph(void){
int   i;
int   v1,v2;//暂时存放两个相关联点的编号
ArcNode*   p=NULL;
printf( "输入结点个数,边数,图类型:\n ");
scanf( "%d,%d,%d ",&Graph.vertexNum,&Graph.arcNum,&Graph.kind);
printf( "输入顶点的数据:\n ");
for(i   =   0;   i   <   Graph.vertexNum;   ++i){     //初始化各个顶点(头节点)
scanf( "%c ",&adjList[i].data);
adjList[i].firstArcNode   =   NULL;
}
printf( "输入相关联的边:\n ");  
for(i   =   0   ;   i   <   Graph.arcNum;   ++i){   //输入所有边(关联的点)编号
scanf( "%d,%d ",&v1,&v2);
p   =   (ArcNode*)malloc(sizeof(ArcNode));
p-> num   =   v2;
p-> nextArcNode   =   adjList[v1].firstArcNode;(提示:p-> nextArcNode   =   0xcdcdcdcd   {num=???   info=???   nextArcNode=???   }。是没有初始化的意思吧,但是不明白怎么初始化呢?我的程序错在什么地方呢?谢谢)
adjList[v1].firstArcNode   =   p;
if(!Graph.kind){     //若为无向图
p   =   (ArcNode*)malloc(sizeof(ArcNode));
p-> num   =   v1;
p-> nextArcNode   =   adjList[v2].firstArcNode;
adjList[v2].firstArcNode   =   p;
}
}
return   1;
}


[解决办法]
int CreateALGraph(void)
{
int i;
int v1,v2;//暂时存放两个相关联点的编号
ArcNode* p=NULL;

printf( "输入结点个数,边数,图类型:\n ");
scanf( "%d,%d,%d ",&Graph.vertexNum,&Graph.arcNum,&Graph.kind);

char c = '0 ';
scanf( "%c ", &c); // absorp the '\n ' character in the above input

printf( "输入顶点的数据:\n "); // input should in the form: abcde for five vertices
for(i = 0; i < Graph.vertexNum; ++i){ //初始化各个顶点(头节点)
scanf( "%c ",&adjList[i].data);
adjList[i].firstArcNode = NULL;
}

printf( "输入相关联的边:\n ");
for(i = 0 ; i < Graph.arcNum; ++i){ //输入所有边(关联的点)编号
scanf( "%d,%d ",&v1,&v2);
p = (ArcNode*)malloc(sizeof(ArcNode));
p-> num = v2;
p-> nextArcNode = adjList[v1].firstArcNode; //(提示:p-> nextArcNode = 0xcdcdcdcd {num=??? info=??? nextArcNode=??? }。是没有初始化的意思吧,但是不明白怎么初始化呢?我的程序错在什么地方呢?谢谢)


adjList[v1].firstArcNode = p;
if(!Graph.kind){ //若为无向图
p = (ArcNode*)malloc(sizeof(ArcNode));
p-> num = v1;
p-> nextArcNode = adjList[v2].firstArcNode;
adjList[v2].firstArcNode = p;
}
}
return 1;
}

[解决办法]
for(i = 0; i < Graph.vertexNum; ++i){
scanf( "%c ",&adjList[i].data);
adjList[i].firstArcNode = NULL;
fflush(stdin);//加这一句,清除缓冲区的残余流,回车符很特殊,实际是两个符号
}

热点排行