C语言程序后面为什么要这样写啊,有点看不懂啊

蓝天梦 发布于 2015/05/07 12:21
阅读 716
收藏 1

@Brin想写程序 大哥又要麻烦您老人家了..

#define NULL 0
    #define TYPE struct stu
    #define LEN sizeof (struct stu)
    struct stu
        {
          int num;
          int age;
          struct stu *next;
        };
    TYPE *creat(int n)
    {
        struct stu *head,*pf,*pb;
        int i;
        for(i=0;i<n;i++)
        {    
          pb=(TYPE*) malloc(LEN);
          printf("input Number and  Age\n");
          scanf("%d%d",&pb->num,&pb->age);
          if(i==0)
          pf=head=pb;
          else pf->next=pb;
          pb->next=NULL;
          pf=pb;
        }
        return(head);
    }



以上是源代码,当i=1时是以下这个样子把


就是不明白下面这个,那个head的指针域现在是不是也是空的,

pf->next=pb;
pb->next=NULL;
pf=pb;

网上是这样说的:

如非第一结点,则把pb值赋予pf 所指结点的指针域成员next。而pb所指结点为当前的最后结点,其指针域赋NULL。 再把pb值赋予pf以作下一次循环准备。

----------------------------------------------------------------------

如果可以的话麻烦帮我详细讲一下啊,我悟性不是很高的..

加载中
0
水至浅
水至浅

分两步理解

i=0的时候和i>0的时候

i=0的时候初始化 

pf=head=pb;这三个指针指向相同的地方。head之后不做任何改变,表示第0个也就是头,最后会直接返回。

进入esle后

pf表示倒数第二个元素,pb是最后一个元素

pf->next=pb;//将倒数第二个元素与最后一个元素连接
pb->next=NULL;

pf看成是中间变量把,永远表示最后一个元素。pf=pb;这句的意思就是这个。

0
Flygend
蓝天梦
蓝天梦
你发省略号什么意思啊,还不如不回答啊
0
淡淡的咸味
淡淡的咸味
建议楼主去看下单链表的知识。head保存的是头指针
蓝天梦
蓝天梦
好的
0
气质舞王尼古拉斯赵四
气质舞王尼古拉斯赵四

i=0的时候pf就是head也就是pb

i不等于0的时候,pf是最后一个节点=》把pf的下个节点指向新的pb=》pb的next置空作为最后一个节点=》pf也指向pb为下一轮做准备

蓝天梦
蓝天梦
谢谢回答喔∩_∩
0
庸俗武士
庸俗武士

楼主写的代码太复杂了。。帮你改进了一下。

TYPE*

create(int n)

{

    int i;

    struct stu *head = NULL;

    struct stu **tmp = &head;


    for(i = 0; i < n; i++){

        *tmp = (TYPE*)malloc(LEN);

        //do Set Value by u self.

        (*tmp)->next = NULL;

        tmp = &((*tmp)->next);

    }

    return head;

}

庸俗武士
庸俗武士
回复 @sw55555 : ☺
s
sw55555
回复 @喷气火箭 :嗯,开始没有仔细看
蓝天梦
蓝天梦
谢谢啦,只能有一个最佳了
庸俗武士
庸俗武士
回复 @sw55555 : 没有啊。还是返回head啊。 return head 啊。。。
s
sw55555
最后返回的不是tail了么?
0
中山野鬼
中山野鬼
哎。。。教科书害死人啊。。。链表节点靠malloc一个个创建。。。。
中山野鬼
中山野鬼
回复 @圆梦人 : 一次申请个够。哈。不够就再一次申请个够。不知是否听懂了。难道你电脑上的物理内存可以随时扩充的吗?哈。
蓝天梦
蓝天梦
动态分配不都是这样的吗,节点不固定啊,一次分配好也不知道有没有那么多内存啊,难道要加一个节点就判断一次吗,有更好的方法就分享一下呗~
0
nzchris
nzchris
楼主字写得不错!练过?
乌龟壳
乌龟壳
回复 @nzchris : 表白啦~~快来看啊~~~
nzchris
nzchris
回复 @圆梦人 : 真心的啊。你这字儿,每一个分开看的话很普通。但是放在一起,很清晰,很有层次感,表现力很强。属于重剑无锋大巧不工的级别了。
蓝天梦
蓝天梦
你是来逗我玩的吗..
0
承蒙
承蒙
移动的pf是个指针,专门指向最后一个元素,这样你就好理解了。
蓝天梦
蓝天梦
嗯嗯,已经知道啦,谢谢喔
返回顶部
顶部