sql 添加字段备注和查看已添加表的备注
虽然avl树和红黑树在数据搜索和排序方面都是有效的数据结构,但是都显得特别麻烦,跳跃表就显得特别简单,虽然简单 不影响他性能,在平均情况下,其插入、删除、查找数据时间复杂度都是O(log(N)),其最坏情况下都为O(N)。 跳跃表的构造源于一种用于查找的基础数据结构---链表。跳跃表就是在普通链表的情况下,随机在一些节点上增加几层链,用于指向后面的数据。
普通链表 :
跳跃表:
链表就像走楼梯,普通链表一步一个阶梯,但是跳跃表可以达到一步好多个阶梯。所以效率比普通链表快多了。
跳跃表实现需要两个类:一个节点类和一个跳跃表本身的类。
=代码如果出错,欢迎指出=
节点类代码:
public class SkipNode
{
public int key;
public Object value;
public SkipNode[] link;
public SkipNode(int level,int key , Object Value)
{
this.key=key;
this.value=value;
link=new SkipNode[level];
}
跳跃表类代码:
public class SkipList
{
private int maxLevel;
private int level;
private SkipNode header;
private const int NIL=Int32.MaxValue;
private const int PROB =0.5F;
}
SkipList类的构造器包含两个部分:带单独一个参数的Public构造器,其中此参数是跳跃表内节点的总数量,以及一个完成大部分工作的Private构造器数。
代码如下:
public SkipList(long maxNodes) //把节点总数量传递给构造器方法作为方法内的唯一参数。初始化跳跃表对象工作的,private构造器在调用时会有两个参数
{
this.SkipList2(PROB,(int)(Math.Ceiling(Math.Log(maxNodes)/Math.Log(1/PROB)-1)));
}
private void SkipList2(float probable,int maxLevel) //设置了数据成员的数值,创建了跳跃表的头节点,创建了用于每个节点链的“空”节点,记忆初始化了该元素的链
{
this.proability=probable;
this.maxLevel=maxLevel;
level=0;
header=new SkipNode(maxLevel,0,null);
SkipNode nilElement=new Skip(maxLevel,NIL,null);
for(int i=0;i<=maxLevel-1;i++)
header.link[i]=nilElement;
}
概率方法代码:
private int GenRandomLevel() //随机给链层数
{
int newLevel=0;
Random r= new Random();
int ran=r.Next(0);
while((newLevel<maxLevel)&&ran<provavility))
newLevel++;
return newLevel;
}
插入代码:
public void insert(int key,Object value)
{
SkipNode[] update=new SkipNode[maxLevel];
SkipNode cursor=header;
for( int i=level;i>=level;i--) //从当前最高层到最底层
{
while (cursor.link[i].key<key) //如果比要找的这个数值要小的话,就到指向下一个节点,用update【i】来接收每一层的最后一个节点
cursor=cursor.link[i];
update[i]=cursor;
}
cursor=cursor.link[0];
if (cursor.key=key) //如果存在,那就覆盖
cursor.value=value;
else
{
int newLevel =GenRandomLevel();
if (newLevel>level) //如果随机出来的链层比当前链层高的情况
{
for(int i=level+1;i<=newLevel-1;i++)
update[i]=header;
level=newLevel;
}
cursor = new SkipNode(newLevel,key,Value); // 插入
for(int i=0;i<=newLevel-1;i++) //插入后改变自己的链指向的节点,和前面节点的链指向的节点变成自己
{
cursor.link[i]=update[i].link[i];
update[i].link[i]=cursor;
}
}
}
删除代码:
public void Delete(int key)
{
SkipNode[] update=new SkipNode[maxLevel+1];
SkipNode cursor=header;
for(Int i=level;i>=level;i--)
{
while(cursor.link[i].key<key)
cursor=cursor.link[i];
update[i]=cursor;
}
cursor=cursor.link[0];
if(cursor.key==key)
{
for(int i=0;i<level-1;i++)
if(update[i].link[i]==cursor)
update[i].link[i]=cursor.link[i]; //直接等于要删除节点的后面节点
while((level>0)&&(header.link[level].key==NIL)) //删除当前节点的链层
level--;
}
}
遍历代码:
public Object Search(int key)
{
SkipNode cursor=header;
for(int i=level;i>0;i--)
{
SkipNode nexeElement=cursor.link[i];
while(nextElement.key<key)
{
cursor=nextElement;
nextElement=cursor.link[i];
}
}
cursor=cursor.link[0];
if(cursor.key==key)
return cursor.value;
else
return "Object not found";
}
csdn搬家
sql 添加字段备注和查看已添加表的备注的更多相关文章
- Oracle数据库查看已添加的索引和创建索引
/** *查看目标表中已添加的索引 * */ --在数据库中查找表名 select * from user_tables where table_name like 'tablename%'; --查 ...
- SQL Server 游标运用:查看数据库所有表大小信息
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:运用游标 方法二:运用系统存储过程 方法三:拼接SQL ...
- Admin添加字段
后台扩展用户信息,注意要到settings里面进行设定,有关联和继承两种方式 首先的关联表可以关联到user表但,主键在user表当中,所以没法直接在user表当中看到相关信息,要是通过继承扩展的话, ...
- mysql中给表添加字段
添加字段: 格式:alter table 表名 add 字段名 字段类型 ; 如:给表stu_info 添加一个字段type,类型为varchar(30) alter table stu_info a ...
- odoo12 修行基础篇之 添加字段 (一)
本人刚刚接触odoo12,大概有2个多月的时间,这两天有点时间,就集中写下博客. 本来是打算整理成笔记,想到这段时间的开发经历,着实感觉网上有关odoo的资料太少,学习资料也不多,既然与odoo有缘, ...
- mssql sqlserver 给已存在表添加新的字段及字段备注的方法
转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...
- 向已写好的多行插入sql语句中添加字段和值
#region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...
- access数据库用sql语句添加字段,修改字段,删除字段
用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...
- AE 向已存在的要素类中添加字段
风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...
随机推荐
- [转]用apache反向代理解决单外网ip对应内网多个web主机的问题
用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...
- UIViewController控制器的生命周期
视图控制器就是用来管理iOS程序中的视图,默认一个UIViewController为我们提供了一个视图UIView 我们称为根视图 - (instancetype)init{ if (self = ...
- oc内存管理总结(一)
**内存管理 问题 1.什么是ios内存管理? 就是在对象不再被使用的时候,把它即时的从内存中清除掉 2.为什么要使用内存管理? 1.严格的内存管理,能够是我们的应用程在性能上有很大的提高 2.如果忽 ...
- iOS之极光推送
注册JPush账号 JPush官网 下载SDK 下载地址:https://www.jpush.cn 根据文档进行集成 文档:http://docs.jpush.io/guideline/ios_gui ...
- JavaScript面向对象,闭包内存图,闭包和作用域
var i = 10; function test(){ var j; i=20; //未定义 function test(){ j='hello'; } console.log(test()); / ...
- UVA 140 Bandwidth
题意: 给出一个n个节点的图G,和一个节点的排列,定义节点i的带宽为i和相邻节点在排列中的最远距离,而所有带宽的最大值就是图的带宽,求让图的带宽最小的排列. 分析: 列出所有可能的排列,记录当前找到的 ...
- Windows下使用TensorFlow
上一篇日志(http://www.cnblogs.com/huidong/p/5426556.html)写了如何在Windows下安装Docker,并且在VM上安装TensorFlow. 在Windo ...
- Goldbach's Conjecture(哥德巴赫猜想)
Goldbach's Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 循环-10. 求序列前N项和*
/* * Main.c * C10-循环-10. 求序列前N项和 * Created on: 2014年7月30日 * Author: Boomkeeper *******部分通过******* */ ...
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...