chen83193093
chen83193093
2017-10-08 01:48
采纳率: 100%
浏览 948
已采纳

C语言问题(数据结构)

 #include "stdio.h"

typedef struct ArcNode{
/*单链表中的结点的类型*/
int  adjvex;                /*该边指向的顶点在顺序表中的位置*/
struct ArcNode  *next;        /*下一条边*/
}ArcNode;

typedef struct VNode{
/*顶点类型*/
int  data;            /*顶点中的数据信息*/
ArcNode  *firstarc;            /*指向单链表,即指向第一条边*/
}VNode;

int visited[5]={0,0,0,0,0};

CreatGraph(int n , VNode G[] ){
   int i,e;
   ArcNode *p , *q;
   printf("Input the information of the vertex\n");
   for(i=0;i<n;i++){
       scanf("%d",&G[i]);
       G[i].firstarc = NULL;                        /*初始化第一条边为空*/
       }
   for(i=0;i<n;i++){
   printf("Creat the edges for the %dth vertex\n",i) ;
   scanf("%d",&e);
    while(e!=-1){
      p = (ArcNode *)malloc(sizeof(ArcNode));            /*创建一条边*/
      p->next = NULL;
      p->adjvex = e;
      if(G[i].firstarc == NULL) G[i].firstarc = p;        /*i结点的第一条边*/
      else q->next = p;                            /*下一条边*/
      q = p;
      scanf("%d",&e);
      }
   }
}

这是邻接表的部分代码。为什么创建边时p要malloc(对应 p = (ArcNode *)malloc(sizeof(ArcNode)); ),而q直接用就行?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • caozhy
    已采纳

    CreatGraph创建边,那么新创建的没有分配内存,就需要malloc分配。q只是保存一个指针的备份,用来当p指向新的对象,p原来指向的对象可以用q获取到。它没有创建什么新的东西,不需要分配内存。

    点赞 评论
  • qq_24041497
    穷得只剩下快乐 2017-10-08 02:03

    直接用肯定会报错吧,而代码中q->next = p;语句是在执行了q = p;之后才执行的,所以没有出问题。你试试在p->adjvex=e;后面加上q->next=p;
    程序是无法运行的,因为q等于NULL,还没有分配空间

    点赞 评论
  • qq_38373149
    小浪zoom 2017-10-08 05:46

    CreatGraph创建边,那么新创建的没有分配内存,就需要malloc分配。q只是保存一个指针的备份,用来当p指向新的对象,p原来指向的对象可以用q获取到。它没有创建什么新的东西,不需要分配内存。代码中q->next = p;语句是在执行了q = p;之后才执行的,所以没有出问题。你试试在p->adjvex=e;后面加上q->next=p;
    程序是无法运行的,因为q等于NULL,还没有分配空间

    点赞 评论

相关推荐