在C中建立邻接列表

时间:2014-04-16 22:24:46

标签: c graph segmentation-fault adjacency-list

我必须制作一个有序图形,它首先进行呼吸搜索,深度优先搜索和拓扑排序。我的教授希望我们使用邻接列表来构建图表并希望我们使用C,即使我们整年都在使用Java,所以当涉及到C时我有点生疏。在编译时遇到分段错误到目前为止,我无法弄清楚原因。我已经尝试使用print语句来查找代码失败的地方但没有打印任何内容。你能帮忙找出问题所在吗?我将包含我的代码和我正在使用的示例数据。

的main.c

   //Main Function

    #include "my.h"

    int main (int argc, char* argv[])
    {

    int y = 0;
    int x = 0;
    VERTEX *adjList[26];
    FILE* p;
    char *fp;
    char a;
    char b;
    int check1 = 0;
    int check2 = 0;
    int size = 0;

    int searchsuccess = 0;
    //Statements

    printf("Awdada");

    p = fopen( argv[1], "r");

    printf("aweada");

    while(fscanf(p, "%c %c",&a,&b)!= EOF)  
    {
    check1 = adjListSearch(a,size,adjList);
        if(check1==1)
    {
        (*adjList[size]).c = a;
        size = size +1;
    }   

    check2 = adjListSearch(b,size,adjList);
    if(check2==1)
    {
        (*adjList[size]).c = b;
        size = size +1;
    }
    }
    //End While




    return 0;
    }
    //End main

adjListSearch.c

#include "my.h"

int adjListSearch (char a, int size, VERTEX* adjList[])
{

int i;

if(size == 0)
{
return 1;
}

for(i = 0; i<size; i++)
{
    if((* adjList[i]).c = a)
    {
    return 0;
    }
}
return 1;

}

my.h

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

/* Forward declaration */
struct EDGETAG;

typedef struct
{
    char c;
    bool isVisited;
    struct EDGETAG* p;
} VERTEX;


typedef struct EDGETAG
{
    VERTEX* v;
    struct EDGETAG* q;
} EDGE;


int main (int argc, char* argv[]);

int adjListSearch (char a, int size, VERTEX* adjList[]);

MYFILE

A  B
B  C
E  X
C  D

1 个答案:

答案 0 :(得分:1)

您可能需要分配VERTEX * adjList [26];在使用之前