首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

100分提问,怎么就没有初始化呢?
再次把这个问题拿出来:
以邻接表为存储结构创建一个图,如下:
//   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;
}

[解决办法]
楼上的你读一下他的程序,adjList[v1].firstArcNode只可能有两个值:开始时为NULL或者后来的p,无论哪一种情况将值赋给p-> nextArcNode 都不会出错的,因为只要是p肯定都已经分配内存了.程序我试了下是没问题,不知LZ怎么搞的
[解决办法]
LZ把这里改下试试看。。。

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 ");
scanf( "%d,%d,%d ",&Graph.vertexNum,&Graph.arcNum,&Graph.kind);
fflush(stdin); ------> 加上这句
printf( "输入顶点的数据:\n ");
for(i = 0; i < Graph.vertexNum; ++i){ //初始化各个顶点(头节点)
scanf( "%c ",&adjList[i].data);
adjList[i].firstArcNode = NULL;
fflush(stdin); ------> 加上这句。
}
------解决方案--------------------


不加fflush(stdin)你前面输入的 '\n '回车符号会读给adjList[0].data;
下面输入abcde(5个顶点)实际子读入了 '\n '和abcd. 最后的e被scanf( "%d,%d ",&v1,&v2);
读入, 显然v1,v2无效了.

热点排行
Bad Request.