C 打印链表数组
我正在尝试打印一组链接列表。我很难把它打印出来。这是我的结构C 打印链表数组,c,arrays,linked-list,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
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循环中的第二个print语句从while循环中取出时,它会创建一个分段,以便程序能够访问它
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);
您的问题可能是:
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
我在创建链接列表时认为,您希望最后一个链接或节点等于NULL?对吗?我该怎么做?你认为你在哪里创建一个链接列表?您所要做的就是循环遍历100个向量的数组,并在向量结构中设置变量。你永远不会比第一关更深。如果v->p应该是链接列表中的下一级,那么v->p->q是链接列表的末尾,而不是v->p。我认为这会创建链接列表?e=(EDGE*)malloc(sizeof(EDGE));v[addcounter].p=e;v[addcounter].c=(char)c;v[addcounter].isvisited=false;v[addcounter].p=NULL;这里有一些严重的设计问题。如果您已经在构建一个顶点数组,那么创建一个链表又有什么意义呢?您所获得的只是顶点的冗余存储/引用。在跳入代码之前,您需要备份一点并查看您的设计。也许起草一份DSD并从那里开始工作。