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搬家

时间: 2024-10-04 05:47:39

sql 添加字段备注和查看已添加表的备注的相关文章

执行sql在一个表中添加字段,加备注

1.加字段: alter table 表名 ADD 字段名 类型; eg: alter table sys_cwzd ADD SCCLLJ VARCHAR2(50); 2.加备注: comment on column 表名.字段名 is '备注名'; eg:comment on column sys_cwzd.SCCLLJ is '上传材料路径'; 原文地址:https://www.cnblogs.com/Cuimc/p/11412191.html

SQL server 添加字段问题

select a.ADJUSTMENT_ID,a.ADJUSTMENT_CODE into tmp20161103 from adjustment_code a ADJUSTMENT_ID会从源表中保留自动增长 select * from tmp20161103 添加列的语法: alter table [表名] add [字段名] 字段属性 default [值] 添加列tt,默认值为0 alter table tmp20161103 add tt int default 0 插入行数据 ins

Sql动态添加字段的正确姿势

如何给指定表动态添加字段? 一.创建一张表[Tbl_AutoFileds] (tableName表名,fieldName字段名,dataType数据类型,length长度  isnull 是否允许为null) 二.为[Tbl_AutoFileds]创建表触发器 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- ============================================= -- Author:<作者> -- Create

更改字段、添加字段脚本以及sql回滚

--修改字段名称 EXEC sp_rename '[dbo].[SysMenu].[Type]', 'Position', 'COLUMN' --添加字段 alter table [dbo].[Agent]add [BelongToUser_ID] [uniqueidentifier] NULL DEFAULT((0)) --sql回滚 begin try--报错回滚开始begin tran --执行代码 commit tran --执行end try begin catch --如果执行上面的

sql添加字段

通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0 alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0 alter

在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2) DEFAULT 'XXX';”操作时,效率及安全性是必须要考虑的因素.若直接执行,则会在该过程中给表加上6级表锁,也就是连查询都需要等待,这在生产库上是相当危险的操作.因为Oracle在执行上述操作过程中,不仅要更新数据字典,还会刷新全部的记录,并且会使得Undo表空间暴涨,所以

oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......

1. 使用oracle创建一张表: SQL> create table loginuser( 2 id number(10,2), 3 username varchar(20), 4 password varchar(20), 5 email varchar(30), 6 descriable varchar2(200), 7 regdate date); 创建表的语法: CREATE TABLE table_name( columns_name datatype,...... ); 显示创建表

修正或添加字段默认值约束的名称

旧项目中的数据库约束名称不规范,写了个脚本重新修改. 1. 名称重新修改为已有的默认值约束的名称为'DF_' + 表名 + 字段名: 2. 没有设置默认值约束的列设置默认值,字符串为空,数值为0: 3. 时间字段除了addtime不加默认值: --修正或添加字段默认值约束的名称为DF_表名_字段 /* SELECT tabName= LOWER(O.name), --表名 colName=LOWER(C.name), --字段名 coltype= LOWER(T.name), --类型 dfVa

SQL Server监控报警架构_如何添加报警

一.数据库邮件报警介绍 数据库邮件是从SQL Server数据库引擎发送电子邮件企业解决方案,使用简单传输协议(SMTP)发送邮件.发送邮件进程与数据库的进程隔离,因此可不用担心影响数据库服务器. 数据库邮件发送要求联网,考虑数据库服务器的安全性,不能将所有服务器的外网开启:处理如下图所示:1.监控服务器轮询每个SQL数据库服务器:2.将获取的数据在监控服务器上集中处理,3.然后通过监控服务器的邮件服务发送邮件. 二.邮件模块处理 笔者发送的邮件内容如下所示,可分为个部分:1.发送主体(发生者)