打印链表列表

时间:2013-12-04 01:29:47

标签: c arrays linked-list

我正在尝试打印一系列链接列表。我无法打印它。这是我的结构。

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

typedef struct EDGETAG
{
    VERTEX* v;
    struct EDGETAG* q;
    //cookies rock
    //I like cookies
}EDGE;

这是我的变量声明

VERTEX v[100];
EDGE *e;
EDGE* temp;
int counter = 0;
int addcounter = 0;
int i = 0;

这是我尝试创建链接列表的地方。我有一个偶数案例和一个奇怪的案例。

//even case
if(counter - i == 1 && flag == 0)
{
    vertices[addcounter] = (char)c;
    //printf("The vertice is %c :\n", vertices[addcounter]);
    e = (EDGE*) malloc(sizeof(EDGE));
    v[addcounter].p=e;
    v[addcounter].c= (char)c; 
    v[addcounter].isvisited=false;
    v[addcounter].p=NULL;  
    addcounter++;
}

//odd case
if(counter - i == 1 && flag == 0)
{
    vertices[addcounter] = (char)c;
    //printf("The vertice is %c :\n", vertices[addcounter]);
    e = (EDGE*) malloc(sizeof(EDGE));
    v[addcounter].p=e;
    v[addcounter].c= (char)c;
    v[addcounter].isvisited=false;
    v[addcounter].p=NULL; 
    (*e).v= &v[addcounter];
    e->q = NULL;
    addcounter++;
}

这是我尝试打印链表的地方。由于某种原因,temp等于NULL,因此它不会打印。我知道我正确地将变量传递给顶点数组的每个案例。它正确打印出来。我不确定我是否正确创建了数组的链表,因为它不会打印出来。当我从while循环中取出时,while循环中的第二个print语句会创建一个分段,以便程序可以到达它。

temp = v[0].p;
if(temp == NULL)
{
    printf("Temp is Null\n");
}

while(temp != NULL)
{
    printf("While loop");
    printf("%c", (*(*temp).v).c);
    temp = temp->q;
}

printf("The vertice is %s :\n", vertices);

1 个答案:

答案 0 :(得分:1)

你的问题可能在这里:

v[addcounter].p=e;
v[addcounter].c= (char)c; 
v[addcounter].isvisited=false;
v[addcounter].p=NULL;  

为什么要将v[x].p设置为e,然后将其设置为NULL几行?稍后当您尝试访问v [0] .p时,它当然仍然是NULL