在C中将新边插入图中

时间:2013-10-17 09:42:40

标签: c list graph edges

我正在使用图表。当我想在边缘列表中插入边时,我的指针有问题。

这是所有图形结构:

typedef struct _edge {
  int source;         
  int dest;          
  int cost;          
  struct _edge *next; 
} edge;

typedef struct {
  int  id;       
  rama *edges;   /* List of edges */
} node;

typedef struct {  
  int n_nodes;     
  int n_edges;     
  int directed;    
  node *nodes;  /* Array of nodes */
} graph;

当我尝试在边缘列表中插入新边时出现问题...

int insert_edge(graph *g, int source, int dest, int cost){

    edge *e;
    edge *nxt;

    e=(edge*)malloc(sizeof(edge));
    e->source=source;
    e->dest=dest;
    e->cost=cost;
    e->next=NULL;

    nxt=g->nodes[source].edges;
    if(nxt==NULL)
        nxt=e;  
    else
    {   
        while(nxt->next!=NULL)  
            nxt=nxt->next;  
        nxt->next=e;        
    }       
    return 1;
}

当我从main函数调用insert_edge时,当我尝试访问边缘的字段时,我遇到了分段错误。

如何正确插入?

当我访问我的图表 - >节点[position] .edges它仍然是空的...我不知道如何在插入函数中更新图形的内容。

1 个答案:

答案 0 :(得分:3)

        nxt=nxt>next; 

这个拼写错误基本上会让你将0/1分配给nxt,之后你会把它当成一个指针。

(PS我几乎可以肯定编译器提供了警告,可以节省宝贵的时间)。


另一个问题是nxt=e;而不是g->nodes[source].edges = e
在第一个 - 你只是改变局部变量,但实际上并没有改变数据。