≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server 数据结构简明备忘录 线性表

人气:464 时间:2019-05-20

这篇文章主要为大家详细介绍了SQL Server 数据结构简明备忘录 线性表,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

线性表

线性表是线性结构的抽象,线性结构的特点是结构中的数据元素之间存在一对一的线性关系。
数据元素之间的位置关系是一个接一个的排列:
.除第一个位置的数据元素外,其他数据元素位置的前面都只有一个数据元素。
.除最后一个位置的外,其他数据元素位置的后面都只有一个元素。
线性表通常表示为:L=(D,R)
D是数据元素的有限集合
R是数据元素之间关系的有限集合

线性表的基本操作:

代码如下:

 
public interface IListDS<T> { 
int GetLength(); //求长度 
void Clear(); //清空 
bool IsEmpty(); //判空 
void Append(T item); //附加 
void Insert(T item, int i); //插入 
T Delete(int i); //删除 
T GetElement(int i); //取表元素 
int Locate(T value); //按值查找 
} 

顺序表

顺序表是线性表的顺序存储(Sequence Storage),是指在内存中用一块地址连续的空间依次存放线性表的数据元素(Sequence List),具有随机存取的特点。

w: 每个数据元素占w个存储单元
A1:顺序表的基地址(Base Address)
Loc(Ai)=Loc(A1)+(i-1)*w 1<=i<=n

为了理解顺序表,闪电学习了这样一个例题,有兴趣的朋友可以在自己的机器上写一下。
有数据类型为整型的顺序表La和Lb,其数据元素均按从小到大的升序排列,编写一个算法将它们合并成一个表Lc,要求Lc中数据元素也按升序排列。
算法思路:
依次扫描La和Lb的数据元素,比较La和Lb当前数据元素的值,将较小值的数据元素赋给Lc,如此直到一个顺序表被扫描完,然后将未完的那个顺序表中余下的数据元素赋给Lc即可。Lc的容量要能够容纳La和Lb两个表相加的长度。
思路图示:
【图片暂缺】

代码如下:


public class SeqList<T> : IListDS<T> { 
private int maxsize; //顺序表的容量 
private T[] data; //数组,用于存储顺序表中的数据元素 
private int last; //指示顺序表最后一个元素的位置 

//构造器 
public SeqList(int size) 
{ 
data = new T[size]; 
maxsize = size; 
last = -1; //如果顺序表为空,last=-1 
} 
//索引器 
public T this[int index] 
{ 
get { return data[index]; } 
set { data[index] = value; } 
} 
//最后一个元素的位置属性 
public int Last 
{ 
get { return last; } 
} 
//容量属性 
public int Maxsize 
{ 
get { return maxsize; } 
set { maxsize = value; } 
} 
//判断顺序表是否为空 
public bool IsEmpty() 
{ 
if (last == -1) 
return true; 
else 
return false; 
} 
//判断顺序表是否为满 
public bool IsFull() 
{ 
if (last == maxsize - 1) 
return true; 
else 
return false; 
} 
//求顺序表的长度 
public int GetLength() 
{ 
return last + 1; 
} 
//清空顺序表 
public void Clear() 
{ 
last = -1; 
} 
//在顺序表末尾添加新元素 
public void Append(T item) 
{ 
if (IsFull()) 
{ 
Console.WriteLine("List is full."); 
return; 
} 
data[++last] = item; 
} 

//在顺序表第i个数据元素位置插入一个数据元素 
public void Insert(T item, int i) 
{ 
if (IsFull()) 
return; 
if (i < 1 || i > last + 2) 
return; 
if (i == last + 2) 
data[last + 1] = item; 
else 
{ 
for (int j = last; j >= i - 1; --j) 
{ 
data[j + 1] = data[j]; 
} 
data[i - 1] = item; 
} 
++last; 
} 
//删除顺序表的第i个数据元素 
public T Delete(int i) 
{ 
T tmp = default(T); 
if (IsEmpty()) 
return tmp; 
if (i < 1 || i > last + 1) 
return tmp; 
if (i == last + 1) 
tmp = data[last--]; 
else 
{ 
tmp = data[i - 1]; 
for (int j = i; j <= last; ++j) 
data[j] = data[j + 1]; 
} 
--last; 
return tmp; 
} 
//获得顺序表的第i个数据元素 
public T GetElement(int i) 
{ 
if (IsEmpty() || (i < 1) || (i > last + 1)) 
return default(T); 
return data[i-1]; 
} 
//在顺序表中查找值为value的数据元素 
public int Locate(T value) 
{ 
if (IsEmpty()) 
return -1; 
int i = 0; 
for (i = 0; i <= last; ++i) 
{ 
if (value.Equals(data[i])) 
break; 
} 
if (i > last) 
return -1; 
return i; 
} 
}
 

代码如下:

 
public class GenericList 
{ 
public GenericList() 
{ } 
public SeqList<int> Merge(SeqList<int> La, SeqList<int> Lb) 
{ 
SeqList<int> Lc = new SeqList<int>(La.Maxsize+Lb.Maxsize); 
int i = 0; 
int j = 0; 
int k = 0; 
//两个表中元素都不为空 
while ((i <= (La.GetLength() - 1)) && (j <= (Lb.GetLength() - 1))) 
{ 
if (La[i] < Lb[j]) 
Lc.Append(La[i++]); 
else 
Lc.Append(Lb[j++]); 
} 
//a表中还有数据元素 
while (i <= (La.GetLength() - 1)) 
Lc.Append(La[i++]); 
//b表中还有数据元素 
while (j <= (Lb.GetLength() - 1)) 
Lc.Append(Lb[j++]); 
return Lc; 
} 
} 

客户端代码:

代码如下:

 
static void Main(string[] args) 
{ 
SeqList<int> sl1 = new SeqList<int>(4); 
sl1.Append(1); 
sl1.Append(3); 
sl1.Append(4); 
sl1.Append(7); 
SeqList<int> sl2 = new SeqList<int>(6); 
sl2.Append(2); 
sl2.Append(5); 
sl2.Append(6); 
sl2.Append(8); 
sl2.Append(11); 
sl2.Append(14); 
GenericList gl = new GenericList(); 
SeqList<int> sl3 = gl.Merge(sl1, sl2); 
Console.WriteLine("length:" + sl3.GetLength()); 
for (int i = 0; i < sl3.GetLength(); i++) 
{ 
Console.WriteLine(i + ":" + sl3[i]); 
} 
} 

好了,下一次学习链表。
作者:LevinLee

本文来自:http://www.q1010.com/179/7475-0.html

注:关于SQL Server 数据结构简明备忘录 线性表的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • win2003 安装 sqlserver 2005的方法
  • SQL Server当恢复sqlserver bak文件时,原始的用户无法删除的解决方法
  • SQL Server分页存储过程(三)在sqlserver中打造更加准确的分页结果
  • 分页存储过程(二)在sqlserver中返回更加准确的分页结果
  • SQLServer上查看SQL语句的执行时间的方法
  • SQL Server 2000数据库同步 同步两个SQLServer数据库的内容
  • SQLServer触发器创建、删除、修改、查看示例代码
  • MMC提示不能打开文件SQLServerEnterpriseManager.MSC的解决方法
  • Sqlserver 存储过程中结合事务的代码
  • SQL SERVER 错误22022 SQLServerAgent当前未运行的解决方法
上一篇:asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
下一篇:SQL Server 批量替换数据库挂马字段并防范sql注入攻击的代码
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。