Linux内核中的红黑树

发表于:2010-8-04 14:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:

  红黑树接口使用的一个典型例子如下:

staticinline struct page * rb_search_page_cache(struct inode * inode,

unsignedlong offset)

{

structrb_node * n = inode->i_rb_page_cache.rb_node;

structpage * page;

while(n)

{

page= rb_entry(n, struct page, rb_page_cache);

if(offset < page->offset)

n= n->rb_left;

elseif (offset > page->offset)

n= n->rb_right;

else

return page;

}

returnNULL;

}

staticinline struct page * __rb_insert_page_cache(struct inode * inode,

unsignedlong offset,

structrb_node * node)

{

structrb_node ** p = &inode->i_rb_page_cache.rb_node;

structrb_node * parent = NULL;

structpage * page;

while(*p)

{

parent= *p;

page= rb_entry(parent, struct page, rb_page_cache);

if(offset < page->offset)

p= &(*p)->rb_left;

elseif (offset > page->offset)

p= &(*p)->rb_right;

else

return page;

}

rb_link_node(node,parent, p);

returnNULL;

}

staticinline struct page * rb_insert_page_cache(struct inode * inode,

unsignedlong offset,

structrb_node * node)

{

structpage * ret;

if((ret = __rb_insert_page_cache(inode, offset, node)))

gotoout;

rb_insert_color(node,&inode->i_rb_page_cache);

out:

returnret;

}

  因为红黑树的这些良好性质和实现中接口的简易性,它被广泛应用到内核编程中,大大提高了内核的效率。

44/4<1234
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号