Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 打印链表数组_C_Arrays_Linked List - Fatal编程技术网

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并从那里开始工作。