回 帖 发 新 帖 刷新版面

主题:求助,C語言結構體問題

【习题9.023】结构体类型定义如下:
    struct date{int year; int month; int day;}; //定义日期结构体类型
    struct student
    {  char name[20]; 
       struct date birth; //出生日期
    };
结构体数组s存储了n个人的名字和出生日期。写一函数,求这n个人中年龄最大
(即出生日期最小)者的姓名。
char *oldest(student s[], int n)
{
}
就這個,我看了書也不是很明白到底結構體的賦值還有比較是什麽回事,我知道結構體相同才能賦值,找到最小級別才能比較,可是實際寫出來不斷報錯,這個煩死我了,希望大神解救,就這個題目,可以有答案和解析最好,能據例也行,萬分感謝!!

回复列表 (共7个回复)

沙发

随手写的,没测试,但大体意思就是这样
[code=c]
char *oldest(student s[], int n)
{
    if( n<=0 )
        return NULL;

    int index = 0;
    for( int i=1; i<n; ++i )
    {
        if( s[i].birth.year < s[index].birth.year
            || (s[i].birth.year==s[index].birth.year && s[i].birth.month<s[index].birth.month)
            || (s[i].birth.year==s[index].birth.year && s[i].birth.month==s[index].birth.month && s[i].birth.day<s[index].birth.day)
        {
            index = i;
        }
    }
    return s[index].name;
}
[/code]

板凳


我想問一下,這道題,怎麼將結構體用鏈錶連接?我試了好久都不行,可以解答一下么?謝謝了
日期和结构体类型定义如下:
    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
    };

struct studentNode *CreateLinkList(struct student s[], int n)
{
}

3 楼

lz的问题就是怎么新建一个链表么?

4 楼


對的,我不明白他的意思,用循環开辟空间然后把结构体的地址赋给链表的结点,我自己这么想的,可是不对

5 楼

bruceteen大哥的意思是找到一个索引,这个索引中是n个人中年龄最大的一个。然后返回姓名。
用的是结构体数组存储的,如果用链表,就得创建链表。比较的方法还是这样的。有空再留代码。

6 楼

还有就是不太明白这个struct studentNode *CreateLinkList(struct student s[], int n)
struct student s[]。这个结构数组都有了,还建立链表干么额?

7 楼


[code=c]
struct studentNode *CreateLinkList( struct student s[], int n )
{
    int i = 0;
    struct studentNode *head, *temp_p, *temp_q ;
    
    head = temp_p = temp_q = NULL;
    
    temp_p = head = (struct studentNode *)malloc( sizeof( struct studentNode ) );
    memset( head, 0, sizeof(struct studentNode) );
    
    for( i = 0; i < n; ++i )
    {
        temp_q = ( struct studentNode * )malloc( sizeof( struct studentNode ) );
        
        strcpy( temp_q->name, s[i].name );
        temp_q->birth = s[i].birth;
        
        temp_p->next = temp_q;
        temp_p = temp_q;        
    }
    temp_p->next = NULL;
    return head;
}

/*char *oldest( student s[], int n )*/ //建立链表了就不需要这么传递参数了,如果非要用链表来做 
char *oldest( struct studentNode *head )
{
    struct student stu_node = { 
        { 0 },
        { 2012, 12, 31 }
    };
    struct studentNode *temp, *rec;
    temp = rec = NULL;
    
    if( head == NULL )
    {
        return NULL;
    }
    temp = head->next;
    
    while( temp != NULL )
    {
        if( temp->birth.year < stu_node.birth.year \
            || (temp->birth.year==stu_node.birth.year && temp->birth.month<stu_node.birth.month) \
            || (temp->birth.year==stu_node.birth.year && temp->birth.month==stu_node.birth.month && temp->birth.day<stu_node.birth.day ))
        {
            stu_node.birth = temp->birth;
            rec = temp;
        }
        temp = temp->next;    
    }
    
    return rec->name;
}
[/code]

我来回复

您尚未登录,请登录后再回复。点此登录或注册