| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1095 人关注过本帖
标题:源程序代码分析
只看楼主 加入收藏
wei_fan
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2008-10-16
结帖率:100%
收藏
 问题点数:0 回复次数:9 
源程序代码分析
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
    int data;
    struct node *next;
}linklist;
void main()
{
    linklist *r,*q,*head;
    int i,j;

     r=(linklist *)malloc(sizeof(linklist));
     head=r;
     for(i=0;i<10;i++)
    {
        r->data=i+1;
        r->next=r;
          printf("%3d",r->data);
    }
        q=(linklist *)malloc(sizeof(linklist));
        q=head;
       
          for(i=0;i<10;i++)
         {
             for(j=0;j<3;j++)
             {   
            
               printf("%3d",q->data);
                q->next=q;
             }
         }

}
为什么不是从1输出而老是输出10?
搜索更多相关主题的帖子: 代码 
2008-10-28 21:23
liujunfeng
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-4
收藏
得分:0 
malloc(sizeof(linklist))
只是为你分配了一个节点的存储空间,只能存储一个节点的数据,
     for(i=0;i<10;i++)
    {
        r->data=i+1;
        r->next=r;
          printf("%3d",r->data);
    }
这个部分,只是将分配的节点反复修改,把data从1改到10;并没有象你想的那样,为你不停的分配节点。而且,该节点的next是指向自己的地址(r->next=r 造成的)
如果想建立一个有10个数据的链表,需要在每次赋值时,重新分配存储空间。
2008-10-28 23:50
wei_fan
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2008-10-16
收藏
得分:0 
那请问哈我该怎么改呢?请指点哈啊!我想了很久都没想明白
2008-10-29 10:43
wsq1986
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-13
收藏
得分:0 
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
    int data;
    struct node *next;
}linklist;
void main()
{
    linklist *r,*q,*p;
    linklist *head=NULL;
    int i,j;
r=(linklist *)malloc(sizeof(linklist));
         head=r;
     
     for(i=0;i<10;i++)
    {    p=(linklist *)malloc(sizeof(linklist));
    
        r->data=i+1;
        r->next=p;
        printf("%3d",r->data);
        r=p;
    }
    
        q=(linklist *)malloc(sizeof(linklist));
      
        q=head;
        for(i=0;i<10;i++)
        {
            printf("%3d",q->data);
            q=q->next;
        }
}
这样的? 不对的地方请指正!
2008-11-04 23:00
sf469210604
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2008-9-26
收藏
得分:0 
貌似也有点问题...
FOR循环中r->next=p已经将节点确定了,
而后面r=p貌似又和LZ的一样了,都没有建立链表.
不知道说的对不对,
楼下高手继续
2008-11-05 20:49
dillon
Rank: 1
等 级:新手上路
威 望:2
帖 子:183
专家分:0
注 册:2008-10-6
收藏
得分:0 
貌似四楼符合LZ的要求
2008-11-05 21:59
yuxiang8200
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-25
收藏
得分:0 
这应该是一个典型的建立链表的方法吧!貌似4楼的程序没有什么问题吧!
2008-11-05 22:30
sf469210604
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2008-9-26
收藏
得分:0 
???
没看懂4楼的链表是怎么建立的啊!!
for(i=0;i<10;i++)
    {    p=(linklist *)malloc(sizeof(linklist));
     
        r->data=i+1;
        r->next=p;
        printf("%3d",r->data);
        r=p;
    }
主要是最后一句,r = p,这是什么意思呢??
我看的书上就写了用递归函数来建立链表,
没看懂4楼的......

[[it] 本帖最后由 sf469210604 于 2008-11-6 16:40 编辑 [/it]]
2008-11-06 16:34
xum2008
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-5
收藏
得分:0 
haha
#include<stdio.h>
#include<malloc.h>
struct stu
{
int data;
struct stu *next;
};
int build( int );


void main ()
{
int n;
struct stu *head;
printf("请输入要添加的数量\n");
scanf("%d", &n);
build(n);
}

int build(int)
{
int n,i;
struct stu *p1;
p1 = (struct stu *)malloc(sizeof(struct stu));
if(n>=1)
{
if(n == 1)
{
head = p1;
head->next = NULL;
}
else if(n > 1)
{
for(i = 0 ; i < n ; i++ )
{
p1 = (struct stu *)malloc(sizeof(struct stu));
printf("请输入数据\n");
scanf("%d", &p1->data);
p1->next = head;
head = p1;
}
}
}
else
printf("error\n");
return 0;
}
2008-11-06 20:38
sf469210604
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2008-9-26
收藏
得分:0 
....
int build(int)
这个什么意思??????????
2008-11-07 09:23
快速回复:源程序代码分析
数据加载中...
 
   



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

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