| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2591 人关注过本帖
标题:c语言结构体的嵌套不明白是什么意思,下面是生成图和图的遍历的头文件
只看楼主 加入收藏
woxingx
Rank: 2
等 级:论坛游民
帖 子:46
专家分:68
注 册:2012-11-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
c语言结构体的嵌套不明白是什么意思,下面是生成图和图的遍历的头文件
typedef  char Datatype;
typedef struct node
{
    int  adjvex;
    struct node *next;
}EdgeNode;
typedef struct  vnode
{
    Datatype vertex;
    EdgeNode *FirstEdge;
}VertexNode;
typedef struct
{
    VertexNode adjlist[M];
    int n,e;
}LinkedGraph;

这些结构体是什么意思?请哪位大侠帮我解释一下,不胜感激
我不太清楚这些结构体到底是什么含义。代表什么。请个路大侠指教
void creat(LinkedGraph *g,char *filename,int c)
{
    int i,j,k;
    EdgeNode *s;
    FILE *fp;
    fp=fopen(filename,"r");
    if(fp)
    {
        fscanf(fp,"%d%d",&g->n,&g->e);
        for(i=0;i<g->n;i++)
        {
            fscanf(fp,"%1s",&g->adjlist[i].vertex);
            g->adjlist[i].FirstEdge=NULL;   //那红色的地方是什么意思。青帮忙解答一下,谢谢
        }
        for(k=0;k<g->e;k++)
        {
            fscanf(fp,"%d%d",&i,&j);
            s=(EdgeNode *)malloc(sizeof(EdgeNode));
            s->adjvex=j;
            s->next=g->adjlist[i].FirstEdge;
            g->adjlist[i].FirstEdge=s;
            if(c==0)
            {
                s=(EdgeNode *)malloc(sizeof(EdgeNode));
                s->adjvex=i;
                s->next=g->adjlist[j].FirstEdge;
                g->adjlist[j].FirstEdge=s;
            }
        }
        fclose(fp);
    }
    else
    g->n=0;
}

void print(LinkedGraph g)
{
    int i;
    EdgeNode *p;
    if(g.n)
    {
        for(i=0;i<g.n;i++)
        {
            printf("%c",g.adjlist[i].vertex);
            p=g.adjlist[i].FirstEdge;
            while(p)
            {
                printf("-->%d",p->adjvex);
                p=p->next;
            }
            printf("\n");
        }
    }
}
搜索更多相关主题的帖子: 不胜感激 结构体 
2012-11-19 23:18
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
typedef  char Datatype;
typedef struct node
{
    int  adjvex;
    struct node *next;
}EdgeNode;
定义一个EdgeNode结构体,里面包含一个int类型和指向本身节点类型的指针,这种叫做自引用结构,数据结构书上有讲

typedef struct  vnode
{
    Datatype vertex;
    EdgeNode *FirstEdge;
}VertexNode;

定义一个VertexNode结构体,里面包含Datatype类型和一个指向EdgeNode类型的指针

typedef struct
{
    VertexNode adjlist[M];
    int n,e;
}LinkedGraph;
定义一个linkedGraph结构体,里面包含VertexNode类型的数组和int类型的变量n,e

g->adjlist[i].FirstEdge=NULL;
g是指向linkedGraph类型的指针,因此表示g指向的结构体中的adjlist数组中,第i个元素中的FirstEdge指针赋值为NULL。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-20 07:07
woxingx
Rank: 2
等 级:论坛游民
帖 子:46
专家分:68
注 册:2012-11-8
收藏
得分:0 
谢谢 那再请你帮我解答一下这是什么意思
p=g.adjlist[i].FirstEdge;
             while(p)
             {
                 printf("-->%d",p->adjvex);
                 p=p->next;
             }
             printf("\n");

 p=g.adjlist[i].FirstEdge;和 P->adjvex ,p=p->next;是什么意思 p=g.adjlist[i].FirstEdge;这里的 P表示什么意思,它怎么可以指向 adjvex成员
请在帮我解答一下,不胜感激
2012-11-20 13:21
woxingx
Rank: 2
等 级:论坛游民
帖 子:46
专家分:68
注 册:2012-11-8
收藏
得分:0 
回复 2楼 pauljames
谢谢 那再请你帮我解答一下这是什么意思
 p=g.adjlist[i].FirstEdge;
              while(p)
              {
                  printf("-->%d",p->adjvex);
                  p=p->next;
              }
              printf("\n");
p=g.adjlist[i].FirstEdge;和 P->adjvex ,p=p->next;
是什么意思 p=g.adjlist[i].FirstEdge;这里的 P表示什么意思,它怎么可以指向 adjvex成员
 请在帮我解答一下,不胜感激
2012-11-20 13:22
勤不移
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2011-7-21
收藏
得分:8 
你纠结的问题是结构体成员变量的引用。
变量引用
第一种如:LinkedGraph g;
这里定义的是一个结构体变量(你可以看成int g一样的变量)
引用成员变量方法:p=g.adjlist[i].FirstEdge;
指针引用
第二种如:LinkeGraph *g;
这里定义的是一个结构体指针(你可以看成int *g一样的指针变量)
引用成员变量方法:1.g->adjlist[i].FirstEdge;
                 2.*g.adjlist[i].FirstEdge;
2012-11-20 16:40
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
p=g.adjlist[i].FirstEdge;
EdgeNode *FirstEdge;
所以,p就是一个指向EdgeNode 的指针
typedef struct node
{
    int  adjvex;
    struct node *next;
}EdgeNode;
因此,这个结构体里面的成员adjvex,next都可以用p->来访问

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-20 20:00
快速回复:c语言结构体的嵌套不明白是什么意思,下面是生成图和图的遍历的头文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055618 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved