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 武汉岩海低应变分析软件,导数据库里不显示波形图
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥30 CanMv K210开发板实现功能
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题