| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 354 人关注过本帖
标题:新手关于链表的求助
只看楼主 加入收藏
LESRACH
Rank: 1
来 自:四川内江
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
新手关于链表的求助
我在看书看到动态链表的有一个问题很不解。
书上在建立动态链表的时候通过循环使用malloc函数开辟节点。但是插入节点的那部分函数时并没有使用malloc函数开辟节点,只是简单的是全局变量节点数n自加1。这个,为什么没有使用呢?是在n自加后会自己开辟节点吗?说不通啊,插入节点函数在建立节点函数后面啊。还是更不需要再开辟呢?基础不好,望各位不要见怪。下面是书上的开头。
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{long num;
flaot score
struct student *next;
};
int n;

struct student *creat(void)
{    struct student *head;
    struct student *p1,*p2;
    n=0;
    p1=p2=(struct student *)malloc(LEN);
    scanf("%ld,%lf",&p1->num,&p1->score);
    head=NULL;
    while(p1->!=0)
    {
        n=n+1;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(struct student *)malloc(LEN);
        scanf("%ld,%lf",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return(head);
}
下面是插入函数。
struct student *insert(struct student *head,struct student *stud)
{
    struct student *p0,*p1,*p2;
    p1=head;
    p0=sutd;
    if(head==NULL)
    {head=p0;p0->next=NULL;}
    else
    {
        while((p0->num>p1->num)&&(p1->next!=NULL))
        {
        p2=p1;
        p1=p1->next;
        if(p0->num<=p1->num)
        {
            if(head==0)head=p0;
            else p2->next=p0;
            p0->next=p1;
        }
        else
        {p1->next=p0;p0->next=NULL;}
    n=n+1;
    return(head);
}
中间省略了一部分的函数。主函数也省略了一部分。
void main()
{
    struct student *head,stu;
    head=creat();
    scanf("%ld,%f",&stu.num,&stu.score);
    head=insert(head,&stu);
}
搜索更多相关主题的帖子: 看书 
2011-05-04 21:25
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:20 
struct student *insert(struct student *head,struct student *stud)//*stud不就是传递进来的结点吗?
{
    struct student *p0,*p1,*p2;
    p1=head;
    p0=sutd;
    if(head==NULL)
    {head=p0;p0->next=NULL;}
    else
    {
        while((p0->num>p1->num)&&(p1->next!=NULL))
        {
        p2=p1;
        p1=p1->next;
        if(p0->num<=p1->num)
        {
            if(head==0)head=p0;
            else p2->next=p0;
            p0->next=p1;
        }
        else
        {p1->next=p0;p0->next=NULL;}
    n=n+1;
    return(head);
}

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-04 22:28
LESRACH
Rank: 1
来 自:四川内江
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-15
收藏
得分:0 
这个,用malloc函数开辟的节点不是临时,可以随时释放的吗?而传递过来的stud指针是静态的啊,这两者可以通用吗?
2011-05-05 09:05
快速回复:新手关于链表的求助
数据加载中...
 
   



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

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