线性表
线性表是线性结构的抽象,线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系。即
- 除第一个位置的数据元素外,其他数据元素位置的前面都只有一个数据元素;
- 除最后一个位置的数据元素外,其他数据元素位置后面都只有一个元素。
也就是说,数据元素是一个接一个的排列。
定义
线性表是由n(n>=0)个相同类型的数据元素构成的有限序列。
线性表的操作接口
以c#做为编写语言,并且使用int型来作为数据元素的数据类型;
//线性表接口:约定线性表的位置以0开始
public interface IList_Int_DS
{
/// <summary>
/// 返回线性表中所有数据元素的个数
/// </summary>
/// <returns>表的长度</returns>
int GetLength();
/// <summary>
/// 清空线性表
/// </summary>
void Clear();
/// <summary>
/// 线性表是否为空
/// </summary>
/// <returns></returns>
bool IsEmpty();
/// <summary>
/// 附加,在线性表末尾添加新元素
/// </summary>
/// <param name="elem">元素</param>
void Append(int elem);
/// <summary>
/// 插入
/// </summary>
/// <param name="key">插入的位置</param>
/// <param name="value">插入的值</param>
void Insert(int key, int value);
/// <summary>
/// 移除(从表末)
/// </summary>
void Remove();
/// <summary>
/// 删除
/// </summary>
/// <param name="key">删除的位置</param>
/// <returns>返回删除后的数据元素</returns>
int Delete(int key);
/// <summary>
/// 获取值
/// </summary>
/// <param name="key">值所处的位置</param>
/// <returns>返回线性表中第key的元素</returns>
int GetElem(int key);
/// <summary>
/// 按值查找
/// </summary>
/// <param name="value">查找的值</param>
/// <returns>返回在线性表中首次出现的值为value的元素,否则未找到该元素,返回一个特殊值表示查找失败(-1)</returns>
int Locate(int value);
}
链表
作为线性表的一种存储结构。
链式存储
链表不要求逻辑上相邻的数据元素在物理存储位置上也相邻,因此在对链表进行插入和删除时不需要像顺序表移动数据元素,但同时也失去了顺序表可随机存储的优点;
链表的定义
在存储数据元素时,除了存储数据元素本身的信息外,还有存储与它相邻的数据元素的存储地址信息;
这两部分信息组成该数据元素的存储映像,称为结点(Node);
结点包含数据域和引用域;
因此,线性表通过每个结点的引用域形成了一根链条,链表也由此而来;
单链表
如果结点的引用域只存储该结点的直接后继的存储地址,则该链表叫单链表;
单链表结点定义代码
//结点
public class Node_Int
{
private int data;//数据域
private Node_Int next;//引用域
public Node_Int()
{
data = default(int);
next = null;
}
public Node_Int(int data, Node_Int next)
{
this.data = data;
this.next = next;
}
public Node_Int(int data)
{
this.data = data;
next = null;
}
public int Data
{
get {
return data; }
set {
data = value; }
}
public Node_Int Next
{
</