免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: attempt
打印 上一主题 下一主题

关于 C 的一小段代码,向各位求教了!谢谢~ [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2007-03-20 16:30 |只看该作者
原帖由 attempt 于 2007-3-20 16:23 发表
多谢各位的帮助
能不能把下面这几行给我加个注释,谢谢

void dls_store(struct address *in)
            {
                static struct address *last=NULL;
                if(!last) last=in;
    ...

这段代码就是把一个节点保存在链表的最末尾。但可惜没把链表的头给保存下来,因此 memory leak 了。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
12 [报告]
发表于 2007-03-20 16:36 |只看该作者
建议楼主做如下的改动。给自己一个后续处理的机会。

  1.             static struct address *first=NULL;
  2.             static struct address *last=NULL;
  3.             void dls_store(struct address *in)
  4.             {
  5.                 in->next=NULL;
  6.                 if(first==NULL){
  7.                     first=in;
  8.                 }
  9.                 if(last!=NULL){
  10.                      last->next=in;
  11.                 }
  12.                 last=in;
  13.             }
复制代码

论坛徽章:
0
13 [报告]
发表于 2007-03-20 16:47 |只看该作者
原帖由 cobras 于 2007-3-20 16:36 发表
建议楼主做如下的改动。给自己一个后续处理的机会。
[code]
            static struct address *first=NULL;
            static struct address *last=NULL;
            void dls_store(struct address *i ...

不用这样烦
static struct address *last=NULL;
void dls_store(struct address *in)
            {
                if(!last)
                {
                     last=in;
                     in->next = NULL;//安全第一,如果传进来已经初始化过,可以删除
               }
                else
                     in->next=last;
                last=in;
            }

[ 本帖最后由 soul_of_moon 于 2007-3-20 16:49 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2007-03-20 16:48 |只看该作者
in->next=NULL;
                if(first==NULL){
                    first = last = in;                   //最好改爲這樣子
                }

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
15 [报告]
发表于 2007-03-20 16:53 |只看该作者
使用单向链表QUEUE不能只记录尾指针,还需要记录头指针.
如果是单向链表STACK,则只需要记录栈顶.
有store则应该有retrieve才是合理的.

论坛徽章:
0
16 [报告]
发表于 2007-03-20 16:54 |只看该作者
原帖由 cobras 于 2007-3-20 16:53 发表
使用单向链表QUEUE不能只记录尾指针,还需要记录头指针.
如果是单向链表STACK,则只需要记录栈顶.
有store则应该有retrieve才是合理的.

我的代码就是只用一个头指针。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
17 [报告]
发表于 2007-03-20 16:56 |只看该作者
循环链表?

论坛徽章:
0
18 [报告]
发表于 2007-03-20 16:58 |只看该作者
原帖由 cobras 于 2007-3-20 16:56 发表
循环链表?

没有啊,我的链表是LIFO,即新增加的节点挂在前面,很常用的一种方法啊

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
19 [报告]
发表于 2007-03-20 16:58 |只看该作者
STACK

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
20 [报告]
发表于 2007-03-20 17:00 |只看该作者
原帖由 soul_of_moon 于 2007-3-20 16:58 发表

没有啊,我的链表是LIFO,即新增加的节点挂在前面,很常用的一种方法啊

使用STACK是单向非循环链表的一惯用法.而用简单不易出错.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP