| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:问道尾插法的问题
只看楼主 加入收藏
gbs121
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-3-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
问道尾插法的问题
struct list
{ int data;
 struct list *next; };
 typedef struct list node;   
 typedef node * link;
 void main()
{ link ptr,head,tail;
int num,i;
tail=(link)malloc(sizeof(node));  
tail->next=null;                                       
ptr=tail;                                             
prinft("\nplease input data:\n");                     
for(i=0;i<=4;i++)                                          
{scanf("%d",&num);                                    
ptr->data=num;                                         
head=(link)malloc(sizeof(node));   
head->next=ptr;                              
ptr=head;}
ptr=head->next
while(ptr!=null)
{printf("the value is %d.\n",ptr->data);
ptr=ptr->next }
};

红色字这两步的malloc都是一样的 问下返回值一样吗?我觉得应该是不一样  可是为什么呢? 还有第二步malloc后
语句是head->next=ptr; 这里是不是用了带头结点的指针?  谢谢各位的回答


[ 本帖最后由 gbs121 于 2011-3-7 15:15 编辑 ]
搜索更多相关主题的帖子: null 
2011-03-07 13:01
gbs121
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-3-7
收藏
得分:0 
怎么没人回啊   急等啊    各位高手  赶快给以解答啊~
2011-03-07 14:30
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:20 
malloc的返回值是申请到的内存空间的首地址, 如果申请失败, 这个返回值是NULL, 即0
2011-03-07 17:10
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
你若想知它们的返回值是否一样, 完全可以搞个变量来存储它们的返回值, 然后用if语句测试下便知.

当然, 事实是, 它们的返回值极可能是不同的, 除非都申请空间失败, 都返回NULL
2011-03-07 17:12
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
第二步malloc后
head->next=ptr

意思就是, 你又申请一块内存, 然后这块内存后边连接着你之前建好的节点
2011-03-07 17:15
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
你是从最后一个节点开始建立的, 然后, 每次新建一个节点, 都将新的节点的后继指向之前一次建好的节点上, 这样就连成了单链表
2011-03-07 17:18
gbs121
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-3-7
收藏
得分:0 
第二步malloc后
head->next=ptr

意思就是, 你又申请一块内存, 然后这块内存后边连接着你之前建好的节点    

这个新的内存块不就是靠head=(link)malloc(sizeof(node)); 申请的吗?  和前面的申请的内存不是同一块  虽然用的都是同一语句   是不是每次这样申请得到的都是一个新的内存块啊?有没可能申请到和前面同一样的内存快?
2011-03-07 18:13
gbs121
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-3-7
收藏
得分:0 
回复 6楼 瓦药墙
第二步malloc后
head->next=ptr

意思就是, 你又申请一块内存, 然后这块内存后边连接着你之前建好的节点   

这个新的内存块不就是靠head=(link)malloc(sizeof(node)); 申请的吗?  和前面的申请的内存不是同一块  虽然用的都是同一语句   是不是每次这样申请得到的都是一个新的内存块啊?有没可能申请到和前面同一样的内存快?
2011-03-07 18:13
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
回复 8楼 gbs121
是新的内存, 不可能是已经申请的内存, 因为你之前申请的内存还未释放, 除非你用realloc, 重新分配内存大小什么的


这个是操作系统干的事儿, 具体细节, 我也不是很清楚
2011-03-07 18:50
gbs121
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-3-7
收藏
得分:0 
回复 9楼 瓦药墙
有道理  没有释放  没用relloc函数  谢谢你哈  明白了   
2011-03-07 19:13
快速回复:问道尾插法的问题
数据加载中...
 
   



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

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