亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: Godbach
打印 上一主題 下一主題

Linux內(nèi)核中的紅黑樹 [復(fù)制鏈接]

論壇徽章:
0
61 [報告]
發(fā)表于 2009-01-23 19:00 |只看該作者
我對這方面還不是弄得很好!
但是還是謝謝了!

論壇徽章:
0
62 [報告]
發(fā)表于 2009-02-04 13:07 |只看該作者
今天也在學(xué)習(xí)RBTree,根據(jù)內(nèi)核里面的代碼(比較懶,結(jié)構(gòu)體和變量名都是內(nèi)核copy的。:)),寫了個測試代碼,分享給大家。

#include "rbtree.h"

struct rb_root        key_user_tree;

struct key_user {
    struct rb_node                node;
    int                        key;               
};

struct key_user root_key_user;

struct key_user * RBTreeInsert(INT32 key)
{
    struct key_user *candidate = NULL, *user;
    struct rb_node *parent = NULL;
    struct rb_node **p;
   
    p = &key_user_tree.rb_node;
   
    while (*p) {
        parent = *p;
        user = rb_entry(parent, struct key_user, node);
        
        if (key < user->key)
            p = &(*p)->rb_left;
        else if (key > user->key)
            p = &(*p)->rb_right;
        else
        {
            printf("RBTreeInsert : exist");
            return NULL;
        }
    }   
   
    candidate = (struct key_user *)malloc( sizeof(struct key_user) );
    if ( NULL == candidate )
    {
        return NULL;
    }
   
    candidate->key = key;
    rb_link_node(&candidate->node, parent, p);
    rb_insert_color(&candidate->node, &key_user_tree);   
   
    return candidate;
}


struct key_user * RBTreeSerach(INT32 key)
{
    struct key_user *user;
    struct rb_node *parent = NULL;
    struct rb_node **p;
   
    p = &key_user_tree.rb_node;
   
    while (*p) {
        parent = *p;
        user = rb_entry(parent, struct key_user, node);
        
        if (key < user->key)
            p = &(*p)->rb_left;
        else if (key > user->key)
            p = &(*p)->rb_right;
        else
        {                       
            return user;
        }
    }   
   
    printf("RBTreeSerach : NULL");
    return NULL;
}

void BRTreeErase( struct key_user *user )
{
    rb_erase(&user->node, &key_user_tree);
   
    free (user );
}

void RBTreeTest()
{
    struct key_user *user;
   
    root_key_user.key = 0;
   
    rb_link_node(&root_key_user.node,
        NULL,
        &key_user_tree.rb_node);
   
    rb_insert_color(&root_key_user.node,
        &key_user_tree);   
   
    if ( NULL == RBTreeInsert( 1 ) )
    {
        printf("RBTreeTest : insert 1 ok");
    }
   
    if ( NULL == RBTreeInsert( 2 ) )
    {
        printf("RBTreeTest : insert 2 ok");
    }
   
    if ( NULL == RBTreeInsert( 1 ) )
    {
        printf("RBTreeTest : insert 1 exist");
    }   
   
    user = RBTreeSerach( 1 );
    if ( NULL != user )
    {
        BRTreeErase( user );
        printf("RBTreeTest : 1 find and delete");
    }
   
    user = RBTreeSerach( 1 );
    if ( NULL != user )
    {
        BRTreeErase( user );
    }
    else
    {
        printf("RBTreeTest : can't find");
    }
   
    user = RBTreeSerach( 2 );
    if ( NULL != user )
    {
        BRTreeErase( user );
        printf("RBTreeTest : 2 find and delete");
    }
}

[ 本帖最后由 HbbT 于 2009-2-4 13:09 編輯 ]

論壇徽章:
0
63 [報告]
發(fā)表于 2011-04-06 15:47 |只看該作者
qos的htb也使用了紅黑樹

論壇徽章:
0
64 [報告]
發(fā)表于 2011-04-06 21:13 |只看該作者
:wink:

論壇徽章:
0
65 [報告]
發(fā)表于 2011-07-19 00:12 |只看該作者
學(xué)習(xí)學(xué)習(xí)

論壇徽章:
0
66 [報告]
發(fā)表于 2011-07-19 14:53 |只看該作者
好文啊,要頂

論壇徽章:
1
天蝎座
日期:2013-12-06 18:23:58
67 [報告]
發(fā)表于 2011-07-20 13:21 |只看該作者
不錯,又看到了。學(xué)習(xí)一下。

論壇徽章:
0
68 [報告]
發(fā)表于 2011-08-05 18:47 |只看該作者
這個之前學(xué)過。現(xiàn)在忘了。
剛好來復(fù)習(xí)一下。{:3_193:}

論壇徽章:
0
69 [報告]
發(fā)表于 2011-09-19 12:33 |只看該作者
今天也在學(xué)習(xí)RBTree,根據(jù)內(nèi)核里面的代碼(比較懶,結(jié)構(gòu)體和變量名都是內(nèi)核copy的。:)),寫了個測試代碼 ...
HbbT 發(fā)表于 2009-02-04 13:07

這段代碼是不是判斷寫錯了?赫赫:wink:

  1. if ( NULL == RBTreeInsert( 1 ) )
  2. {
  3.                 printf("RBTreeTest : insert 1 ok\n");
  4. }

  5. if ( NULL == RBTreeInsert( 2 ) )
  6.   {
  7.                 printf("RBTreeTest : insert 2 ok\n");
  8.   }
復(fù)制代碼
是不是應(yīng)該這樣寫:

  1. if ( NULL != RBTreeInsert( 1 ) )
  2.         {
  3.                 printf("RBTreeTest : insert 1 ok\n");
  4.         }

  5.         if ( NULL != RBTreeInsert( 2 ) )
  6.         {
  7.                 printf("RBTreeTest : insert 2 ok\n");
  8.         }
復(fù)制代碼

論壇徽章:
0
70 [報告]
發(fā)表于 2012-09-02 17:06 |只看該作者
沒看明白,要慢慢琢磨了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP