设为首页 加入收藏

TOP

经过自动压力测试的红黑树(删除功能完备)(四)
2014-11-24 00:11:55 来源: 作者: 【 】 浏览:90
Tags:经过 自动 压力 测试 删除 功能 完备
ntf("will delete %d \n",data);

if(!drop->left && !drop->right )

{

if (!drop->parent)

{

myfree(drop);

node->root=0;

}

else

{

if (drop->parent->left==drop)

{

drop->parent->left=0;

}

else

{

drop->parent->right=0;

}

myfree (drop);

}

}

else if (!drop->right )

{

if(!drop ->parent)

{

node->root=drop->left;

}

else

{

if (drop->parent->left==drop)

{

drop->parent->left=drop->left;

mode=0;

}

else

{

drop->parent->right=drop->left;

mode=1;

}

}

curnode=drop->left;

curnode->parent=drop->parent;

myfree (drop);

delete_fixup (node, curnode,mode);

}

else

{

suc=next ( drop->right);

value=drop->m_data;

drop->m_data=suc->m_data;

suc->m_data=value;

if(suc->parent->left==suc)

{

mode=0;

}

else

{

mode=1;

}

if(!suc->right)

{

if(0==mode)

{

suc->parent->left=0;

}

else

{

suc->parent->right=0;

}

myfree(suc);

}

else

{

if(0==mode)

{

suc->parent->left=suc->right;

}

else

{

suc->parent->right=suc->right;

}

curnode=suc->right;

curnode->parent=suc->parent;

myfree(suc);

delete_fixup (node ,curnode,mode);

}

}

node->size--;

}

else

{

}

node->root->m_color=BLACK;

}

void insert ( wrapdata *node , int data )

{

redblack *newnode;

redblack *curnode;

int relation;

node->size++;

newnode=newstruct (data);

printf("will insert %x %d \n",newnode,data);

if ( ! node->root)

{

node->root= newnode;

}

else

{

curnode=node->root;

while(1)

{

relation=compare(data,curnode);

if(relation==-1)

{

node->size--;

myfree(newnode);

return ;

}

else

{

if ( relation==1)

{

if (!curnode->right)

{

curnode->right=newnode;

newnode->parent=curnode;

break;

}

else

{

curnode=curnode->right;

}

}

else

{

if (!curnode->left)

{

curnode->left=newnode;

newnode->parent=curnode;

break;

}

else

{

curnode=curnode->left;

}

}

}

}

insert_fixup ( node , newnode);

}

node->root->m_color=BLACK;

}

int main()

{

int i;

wrapdata *node;

data *newdata;

int count;

init();

srand(time(NULL));

node=(wrapdata*)calloc (1 ,sizeof (wrapdata));

global_node=node;

/*

int value[]={12,24,25,9,4,91,2,100,98,95,93,96,99,120,13};

// int value[]={12,24,25,9,4,91,2};

node=(wrapdata*)calloc (1 ,sizeof (wrapdata));

for (i=0;i

{

insert (node ,value[i]);

}

printf("%d \n",depth (node->root));

mid_print (node->root,0);

printf("\n");

while(1)

{

printf("into delete mode\n");

while( scanf("%d",&i) && i)

{

delete (node ,i);

printf("%d \n",depth (node->root));

mid_print (node->root,0);

printf("\n");

}

printf("into insert mode\n");

while( scanf("%d",&i) && i)

{

insert (node ,i);

printf("%d \n",depth (

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CString出错 _free_dbg(p, _NORMA.. 下一篇关于拷贝(复制)构造函数为什么..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: