我正在尝试打印一系列链接列表。我无法打印它。这是我的结构。
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);
答案 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
。