首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言链表的有关问题

2013-04-26 
C语言链表的问题简单的生成链表的代码:#include stdio.h#include stdlib.hstruct Student{int idchar

C语言链表的问题
简单的生成链表的代码:


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

struct Student
{
    int id;
    char *name;
    char sex;
    int age;
};
struct StudentList
{
    struct Student *student;
    struct StudentList *next;
};
struct Student makeStudent(int id,char *name,char sex,int age)
{
    struct Student student;
    student.id=id;
    student.name=name;
    student.sex=sex;
    student.age=age;
    return student;
}
struct StudentList * addList(struct Student *student,struct StudentList *head)
{
    struct StudentList sl;
    sl.student=student;
    sl.next=head;
    head=&sl;
    return head;
}
void show(struct StudentList *head)
{
    struct Student *sp;
    while(head!=NULL)
    {
        sp=head->student;
        if(sp!=NULL)
        {
            printf("ID:%d\tName:%s\tSex:%c\tAge:%d\n",sp->id,sp->name,sp->sex,sp->age);
        }
        head=head->next;
    }
}
int main()
{
    struct Student sd=makeStudent(1,"Tom",'F',20);
    struct Student sd1=makeStudent(2,"Tony",'M',22);
    struct StudentList *head=NULL;
    head=addList(&sd,head);
    head=addList(&sd1,head);
    printf("%s\n",head->student->name);     //1
    printf("%s\n",head->student->name);     //2
   // show(head);
    return 0;
}


上面addList函数添加节点,show函数遍历链表。现在问题是main函数里单独执行注释1或2的printf能产生结果,两个一起执行就只能正常输出一次,第二次不输出,产生错误的返回值。这是为什么呢?
还有如果两个printf都不执行,只执行一个printf("%s\n",head->next->student->name); 结果显示的却是Tony,不应该是Tom的吗?
show函数就更不用说了,一样只能产生一个值,如果前面有printf语句,就一个值也没有。
是链表生成的函数写得不对吗?就是找不出问题来,求大神帮忙看一下。 C 链表 struct
[解决办法]
问题很多呀。
1.
struct StudentList 
{     
    struct Student *student;     // 这个也是指针?    struct StudentList *next; 
}; 
你的链表里存的都是指针,一个实际数据也没有,空手套白狼啊?
2.就算1里的不是指针是结构体,addList函数中返回的也是局部对象的地址,没有任何意义
3.结构体里的char*没有指向可用的(可改写的空间,或者说没有分配空间),这样的链表基本没有实际用处

热点排行