| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4450 人关注过本帖
标题:把结构体数组连接成链表问题;
只看楼主 加入收藏
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:14 
把结构体数组连接成链表问题;
struct studentNode *CreateLinkList(struct student s[], int n)   /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/
{  struct studentNode *head,*p;                                    
    if(n==0)return null;
    for(int i=0;i<n;i++)
   {
     p=(studentNode *)malloc(sizeof(struct studentNode));
     for(int j=0;j<10;j++)          /从这里把结构体数组各成员放进链表的各个结点/
     p->name[j]=s[i].name[j];
     p->birth=s[i].birth;            /到这里单个结构体的成员全部放入一节点/
     if(i==0)
     {
     head=p;                           /可能是这个地方有问题,我想把各个节点连接起来,但没有连接成,我看不出哪里出问题/
     p=head->next;
     }
     else p=p->next;
   }
    p=null;
   return head;
  }

请各位老师帮忙看下,谢谢!!!!
搜索更多相关主题的帖子: 结构体 数组 连接 链表 struct 
2018-01-06 14:36
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
DDD
2018-01-06 16:52
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
没人吗
2018-01-06 20:30
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:0 
给studentNode和student结构看看
2018-01-06 20:42
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
回复 4楼 吹水佬
struct date{int year; int month; int day;}; //日期结构体类型
    struct student    //结构体类型
    {  char name[10];     //人名
       struct date birth; //出生日期
    };

结构体数组s存储了n个人的名字和出生日期。写一函数,由数组s中n个人
的信息及其顺序构造相应的链表。链表的结点的结构体类型定义如下:
    struct studentNode    //结构体类型
    {  char name[10];     //人名
       struct date birth; //出生日期
       struct studentNode *next
    }
  

就这些了
2018-01-06 20:49
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
....
p=(studentNode *)malloc(sizeof(struct studentNode));
     for(int j=0;j<10;j++)          /从这里把结构体数组各成员放进链表的各个结点/
     p->name[j]=s[i].name[j];
     p->birth=s[i].birth;            /到这里单个结构体的成员全部放入一节点/
     if(i==0)
     {
     head=p;                           /可能是这个地方有问题,我想把各个节点连接起来,但没有连接成,我看不出哪里出问题/
     p=head->next;
     }
     else p=p->next;


地址丢失

剑栈风樯各苦辛,别时冰雪到时春
2018-01-06 21:05
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
回复 6楼 林月儿
为什么会出现这问题呀?要怎么解决
2018-01-06 21:42
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h> 
#include<string.h> 
struct date{int year; int month; int day;}; //日期结构体类型
struct student{    //结构体类型
    char name[10];     //人名
    struct date birth; //出生日期
};
struct studentNode{    //结构体类型
    char name[10];     //人名
    struct date birth; //出生日期
    struct studentNode *next;
};
struct studentNode *CreateLinkList(struct student s[], int n){  
    struct studentNode *head,*p;                                    
    //新建头节点
    p=head=(struct studentNode *)malloc(sizeof(struct studentNode)); 
    for(int i=0;i<n;i++){
        // 循环创建新的结点,尾插法创建链表 
        struct studentNode *q=(struct studentNode *)malloc(sizeof(struct studentNode));
        // 拷贝名称 
        strcpy(q->name,s[i].name);
        // 复制日期属性 
        q->birth=s[i].birth;       
        // 添加结点 
        p->next=q;
        // 移动当前结点标记 
        p=q;
    }
    // 尾部标记 
    p->next=NULL;
    // 返回首元节点 
    return head->next;
}
int main(){
    // 数组创建 
    struct student arr[]={
        {"aaa",{1993,2,3}},
        {"bbb",{1997,7,4}}, 
        {"ccc",{1994,5,6}} 
    };
    // 函数调用 
    struct studentNode *p=CreateLinkList(arr, 3);
    // 遍历检查 
    while(p != NULL) {
        printf("%s:%d-%d-%d\n",p->name,
        p->birth.year, p->birth.month, p->birth.day);
        p = p->next;
    }
} 

不才,稍稍改动。久不碰,有点生疏

[此贴子已经被作者于2018-1-6 22:08编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2018-01-06 22:07
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:1 
p是新申请的内存,没看见你对它的next指针赋值啊。只看到
p->name[j]=s[i].name[j];
     p->birth=s[i].birth;
这两个值域你赋值了。没赋值的next被访问到了,所以会出错吧。
2018-01-06 22:42
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:4 
以下是引用TIMFannie在2018-1-6 20:49:09的发言:

 struct date{int year; int month; int day;}; //日期结构体类型
    struct student    //结构体类型
    {  char name[10];     //人名
       struct date birth; //出生日期
    };

结构体数组s存储了n个人的名字和出生日期。写一函数,由数组s中n个人
的信息及其顺序构造相应的链表。链表的结点的结构体类型定义如下:
    struct studentNode    //结构体类型
    {  char name[10];     //人名
       struct date birth; //出生日期
       struct studentNode *next
    }
  

就这些了

改了一下 studentNode 结构表达形式,实质没变

#include <stdio.h>
#include <stdlib.h>

struct date
{
    int year;
    int month;
    int day;
};

struct student
{
    char name[10];
    struct date birth;
};

struct studentNode
{
    struct student st;
    struct studentNode *next;
};

struct studentNode *CreateLinkList(struct student s[], int n)
{
    struct studentNode *head=NULL, *p;
    while (n--)
    {
        p = (struct studentNode *)malloc(sizeof(struct studentNode));
        p->st = s[n];
        p->next = head;
        head = p;
    }
    return head;
}

void _free(struct studentNode *h)
{
    struct studentNode *p;
    while (h)
    {
        p = h->next;
        free(h);
        h = p;
    }
}

void _prn(struct studentNode *h)
{
    for (; h; h=h->next)
        printf("%s %d %d %d\n", h->st.name, h->st.birth.year, h->st.birth.month, h->st.birth.day);
}

main()
{
    struct student s[3]=
    {
        "a1",2011,1,11,
        "a2",2012,2,12,
        "a3",2013,3,13
    };
    struct studentNode *head = CreateLinkList(s, 3);
    _prn(head);
    _free(head);
}
2018-01-06 22:50
快速回复:把结构体数组连接成链表问题;
数据加载中...
 
   



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

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