leftist (左偏堆,插入与弹出功能的实现)
来源:互联网 发布:织梦dedecms教程 编辑:程序博客网 时间:2024/05/01 12:56
#include <stdio.h>
#include <stdlib.h>
#define NIL 99999
typedef struct _leftist
{
int key;
int dis;
struct _leftist *left;
struct _leftist *right;
}leftist;
leftist *newstruct ( int key);
leftist *nilstruct ( )
{
static leftist *obj=NULL;
if (!obj )
{
obj=newstruct ( NIL);
obj->key=NIL;
obj->dis=0;
}
else
{
}
return obj;
}
leftist *newstruct ( int key)
{
leftist *obj=(leftist *)calloc ( 1 ,sizeof (leftist));
obj->dis=0;
obj->key=key;
return obj;
}
leftist *leftist_adjust ( leftist *left)
{
leftist *tmp;
if(!left->left)
{
}
else
{
if(left->left->dis>= left->right->dis)
{
left->dis=left->right->dis+1;
return left;
}
}
tmp=left->left;
left->left=left->right;
left->right=tmp;
if(!left->right)
{
left->dis=0;
}
else
{
left->dis=left->right->dis+1;
}
return left;
}
leftist * leftist_merge ( leftist *left ,leftist *right)
{
if(!left)
{
return right;
}
if (!right)
{
return left;
}
if (left->key < right->key)
{
left->right=leftist_merge ( left->right ,right );
return leftist_adjust (left);
}
else
{
right->right=leftist_merge ( left ,right->right);
return leftist_adjust ( right );
}
}
leftist *leftist_pop ( leftist **head)
{
leftist *result=*head;
*head=leftist_merge ( result->left ,result->right );
return result;
}
int main()
{
int i;
leftist *head=NULL;
leftist *obj=NULL;
int a[]={11,45,32,22,145,333,789,76,31,90,10,20,50,666,1111,9};
for(i=0;i<sizeof (a )/sizeof (int );i++)
{
obj=newstruct ( a[i]);
head= leftist_merge ( head ,obj );
}
while(1)
{
if (! head->left && !head->right )
{
obj=head;
printf(" %d ",obj->key);
break;
}
obj=leftist_pop ( &head);
printf(" %d ",obj->key);
}
}
- leftist (左偏堆,插入与弹出功能的实现)
- leftist (左偏堆,自动测试)
- 弹出窗口功能的实现
- CKEditer实现插入图片的功能
- PyQt4实现USB设备插入到弹出的检测(Windows)
- 队列实现插入,弹出,找到最大值和最小值的操作
- gridview实现插入功能
- 左偏树(Leftist Tree)的合并
- Gridview 控件与detailview控件合用实现插入功能
- 实现遮蔽罩弹出窗体功能
- PopupWindow实现弹出框功能
- DialogFragment 实现支付弹出功能
- jquery实现点击信息弹出层的功能
- [WPF]如何实现设置弹出窗口的Owner属性功能?
- 【Android】菜单功能的实现:弹出Popup菜单 以及小结
- chromium浏览器页面longclick弹出菜单功能的实现
- android弹出了单选框和listview实现功能的问题
- 实现键盘弹出时,显示Emoji按钮的功能
- Android Screen Monitor抓取真机屏幕
- 二十. 通过管道组合Shell命令获取系统运行数据:
- Activity生命周期
- CSDN>>2011年重大IT安全事件回顾
- jdom读取html的小例子
- leftist (左偏堆,插入与弹出功能的实现)
- SqlServer上的 *.mdmp文件
- Android菜单
- 著名画家吕顺和“2011胡润最受尊敬企业家”获奖得主大智慧集团总裁张长虹
- 用NSZombieEnabled帮助解决EXC_BAD_ACCESS
- 安装ie9出现错误代码800F081E
- 如何使用命令行启动控制面板中的应用程序
- Android模拟器(AVD)~【1】启用SD存储卡
- WinCE内核裁减(中文字体)及字库和内核的分离