1.线性表的定义
- 0个或多个数据元素的有限队列
- 若将线性表记为(a1,…ai-1,ai,ai+1…an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。
- 线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,成为空表。
- 在较复杂的线性表中,一个数据元素可以由若干个数据项组成。
2.线性表的抽象数据类型
- 初始化 。
- 判断是否为空表。
- 清空。
- 得到线性表中的第i个元素。
- 查找线性表中的与给定值e相等的元素,如果查找成功,返回该元素在表中的序列号表示成功,若失败,返回0表示失败(书中这么写的,我认为应该返回-1吧)。
- 在线性表中的第i个位置插入新元素e。
- 删除线性表中的第i个位置的元素,并用e返回其值。
- 返回线性表的个数。
3.线性表的顺序存储结构
- 图示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200605124725428.png#pic_center)
- 代码示例:
public class MySqList_T<T>
{
public T[] data;
public int length;
private const int MaxCount = 100;
public MySqList_T()
{
data = new T[MaxCount];
length = 0;
}
public string DispList()
{
if (length < 1)
{
return "表为空";
}
string str = string.Empty;
for (int i = 0; i < length; ++i)
{
str += data[i].ToString() + " ";
}
return str;
}
public void AddData(T value)
{
int index = length;
data[index] = value;
length += 1;
}
public bool InsertData(int index, T value)
{
if (index < 1 || index > length + 1)
{
return false;
}
for (int i = length; i >= index; --i)
{
data[i] = data[i - 1];
}
data[index - 1] = value;
length += 1;
return true;
}
public bool DeleteData(int index)
{
if (index < 1 || index > length - 1)
{
return false;
}
for (int i = index - 1; i < length - 1; ++i)
{
data[i] = data[i + 1];
}
length -= 1;
return true;
}
public bool GetData(int index, ref T value)
{
if (index < 1 || index > length)
{
return false;
}
value = data[index -1];
return true;
}
public bool HasData(T value)
{
for (int i = 0; i < length; ++i)
{
if (string.Equals(data[i], value))
{
return true;
}
}
return false;
}
}
4.线性表的链式存储结构
- 1.顺序存储结构的不足:
- 2.线性表链式存储结构定义:
- 为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对于数据元素ai来说,除了存储本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。
- 我们把存储数据元素新的域称为数据域,把存储直接后继位置的域称为指针域。
- 指针域中存储的信息称做指针或链。这两部分信息组成数据元素ai的存储映像,称为:结点。
- n个结点(ai的存储映像)链结成一个链表,即为线性表(a1,a2 … , an)的链式 存储结构,因为此链表的每个节点中只包含一个指针域,所以叫单链表。
- 图示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200605135640547.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlYW4yNzI3Mjc=,size_16,color_FFFFFF,t_70#pic_center)
5.线性表的链式存储结构代码示例
6.单链表结构与顺序存储结构优缺点
- 存储方式分配
- 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素。
- 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。
- 时间性能
- 查找
- 顺序存储结构0(1)
- 单链表0(n)
*插入和删除 - 顺序存储结构需要平均移动表长为一半的元素,时间为0(n)
- 单链表在找出某位置的指针后,插入和删除时间仅为0(1)