Splay
来源:互联网 发布:电脑怎么恢复数据 编辑:程序博客网 时间:2024/04/20 20:55
</pre><pre name="code" class="cpp">
#include <cstdio>#include <cstdlib>using namespace std;typedef struct Splaynode *Splay;typedef struct Splaynode{ Splay r,l; int key;}Splaynode;void Splay L(Splay p){Splay q; q=p->r; p->r=q->l; q->l=p; p=q;}void Splay R(Splay p){Splay q; q=p->l; p->l=q->r; q->r=p; p=q;}Splay splay(int tkey,Splay p){ Splaynode Header; Splay Lax,Rin; Header.l=Header.r=NULL; Lax=Rin=&Header; while(tkey!=p->key){ if(tkey<p->key){ if(tkey<p->l->key) L(p); if(p->l==NULL) break; Rin->l=p; Rin=p; p=p->l; } else if(tkey>p->key){ if(tkey>p->r->key) R(p); if(p->r==NULL) break; Lax->r=p; Lax=p; p=p->r; }else break; Lax->r=p->l; Rin->l=p->r; p->l=Header.r; p->r=Header.l; } return p;}Splay Insert(int tkey,Splay p){ Splay New; New=(Splay) malloc(sizeof(Splaynode)); if(p==NULL) {New->l=New->r=NULL; New->key=tkey; p=New;} else{ p=splay(tkey,p); if(tkey<p->key){New->l=p->l; New->r=p; p->r=NULL; p=New;} else if(tkey>p->key){New->r=p->r; New->l=p; p->l=NULL; p=New;} free(New); return p; }}Splay Remove(int tkey,Splay p){ Splay New; if(p!=NULL){ p=splay(tkey,p); if(tkey==p->key){ if(p->l==NULL) New=p->r; else{New=p->l; New=splay(tkey,New); New->r=p->r;} free(p); p=New; } } return New;}int main(){return 0;}
参考:http://www.cnblogs.com/kuangbin/archive/2012/10/07/2714068.html
0 0
- SPLAY
- splay
- splay
- splay
- Splay
- Splay
- splay
- splay
- splay
- splay
- Splay
- splay
- Splay
- splay
- Splay
- Splay
- splay
- Splay大功告成
- 多线程实现线程同步——互次对象
- JavaScript技巧45招
- hadoop集群上面安装 spark 1.1.0
- mini2440硬件篇之IIC
- JBoss AS / JBoss EAP / wildfly 区别
- Splay
- python之globals()和locals()
- 关于测试的一些感悟
- 根据字符串生成日期
- C#探秘系列(七):XML文件操作(一)
- HTTP请求头和相应头的详细介绍
- [问题篇1]VMWare搭建Openstack——neutron agent-list的状态无效
- 文本分类(power 8算法挑战赛第五期)
- HDU1671 Phone List【字典树】