EatZT 2017-10-08 01:48 采纳率: 100%
浏览 964
已采纳

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条回答 默认 最新

  • threenewbee 2017-10-08 01:58
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘