标题:关于链表的建立
只看楼主
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
结帖率:75%
已结贴  问题点数:5 回复次数:28 
关于链表的建立
现在有点疑惑想问一下?
为什么建立链表时只能如下建立,而不能while(p->next!=NULL){p=(struct connection*)malloc(sizeof(struct connection));p=p->next}这样赋值呢??求解??

while(p->next!=NULL)
    {
        s=(struct connection*)malloc(sizeof(struct connection));
        p->next=s;                        //把s的地址赋值给p-next
        printf(":\n");
        scanf("%d",&s->number);
        printf("\n");
        fflush(stdin);
        gets(s->name);
        printf("\n");
        fflush(stdin);
        gets(s->adress);
        printf(":\n");
        fflush(stdin);
        gets(s->tphone);
        printf(":\n");
        fflush(stdin);
        gets(s->qq);
        p=s;
        printf("y/n\n");
        fflush(stdin);
        scanf("%c",&c);
        if(c!='y'&&c!='Y')
        {
            p->next=NULL;
        }
        p=s;                        //把s的地址赋值给p
搜索更多相关主题的帖子: number while 
2011-06-05 21:55
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
得分:0 
p=(struct connection*)malloc(sizeof(struct connection));给指针p申请内存,
p=p->next;没有东西啊。。。
我意思表达的不清楚。。。

。。。!!!)))000
2011-06-05 22:01
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
得分:0 
while(p->next!=NULL){p=(struct connection*)malloc(sizeof(struct connection));p=p->next}
这样写链表根本就没建起来啊!你做的是一个一个的单节点循环链表!
2011-06-06 08:15
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
逆序建立最简单
链表类_C语言.rar (1.71 KB)

                                         
===========深入<----------------->浅出============
2011-06-06 08:49
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 3楼 qldxsun
然后呢??为什么这样子会建立不起来呢??为什么非要按照建一个新节点再把节点给那个链表呢??

菜鸟一名,准备起飞
2011-06-06 09:33
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
回复 4楼 laoyang103
但是我只想知道最基本链表的建立方式,它的原理是什么,他在计算机内的操作是怎么进行的?

菜鸟一名,准备起飞
2011-06-06 09:34
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
程序代码:
while ( p->next != NULL ){
    p->next = (struct connection *) malloc(sizeof(struct connection));
    p = p->next;
    ...
}


这样也是可以滴。其实跟楼主的代码的语义是一样的。
原理就是:
1. 给下一项非配空间
2. 将前向的 next 指向下一项
3. 当前项指向下一项,读取数据
4. 不断重复 1~3

其实就是分配一堆空间,各自存放相应的数据,然后在各个分配的空间之间建立联系
收到的鲜花
  • 小菜小C2011-06-06 21:47 送鲜花  5朵   附言:看着有点懂
2011-06-06 16:43
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
你画画内存图像就知道链表是怎么建立的

                                         
===========深入<----------------->浅出============
2011-06-06 16:45
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
得分:0 
想现在已经知道链表的建立,谁能告诉我,怎样将文件中的数据输给链表,说方法即可,不必放代码,是用什么函数实现的?

菜鸟一名,准备起飞
2011-06-06 21:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:5 
把 scanf 改成 fscanf 不就好了?
2011-06-06 21:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-341989-1-1.html




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

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