数据结构第2章线性表
来源:互联网 发布:淘宝上最好的中药店 编辑:程序博客网 时间:2024/05/02 11:19
线性表这一章具体的讲解了数据结构的分类即逻辑结构和存储结构,因此本章第一节从线性表的逻辑结构让我们对线性表的定义和线性表的抽象数据类型的定义有了全面的了解,而二三节讲解线性表的存储结构 即顺序表采用顺序存储结构,即用一段地址连续的存储单元依次存储线性表的数据元素,数据元素之间的逻辑关系通过存储位置来实现。链表采用链接存储结构,即用一组任意的存储单元存放线性表的元素,用指针来反映数据元素之间的逻辑关系。第四节则是顺序表和链表的比较,第五节使线性表的其他储存。
第一节
线性表的定义:简称表,是n(n〉=0)个具有相同类型的数据元素的有限序列,线性表中数据 据元素的个数为线性表的长度。长度为0时成为空表,一个非空表通常记为(L=a1a2......an)
线性表的逻辑结构{
线性表的抽象数据类型的定义
ADT List
Data
线性表中的数据元素具有相同类型,
相邻元素具有前驱和后继关系
Operation
InitList
前置条件:表不存在
输入:无
功能:表的初始化
输出: 无
后置条件:建一个空表
DestroyList
前置条件:表已存在
输入:无
功能:销毁表
输出:无
后置条件:释放表所占用的存储空间
Length
前置条件:表已存在
输入:无
功能:求表的长度
输出:表中数据元素的个数
后置条件:表不变
Get
前置条件:表已存在
输入:元素的序号i
功能:在表中取序号为i的数据元素
输出:若i合法,返回序号为i的元素值,否则抛出异常
后置条件:表不变
Locate
前置条件:表已存在
输入:数据元素x
功能:在线性表中查找值等于x的元素
输出:若查找成功,返回x在表中的序号,否则返回0
后置条件:表不变
Insert
前置条件:表已存在
输入:插入i;待插x
功能:在表的第i个位置处插入一个新元素x
输出:若插入不成功,抛出异常
后置条件:若插入成功,表中增加一个新元素
Delete
前置条件:表已存在
输入:删除位置i
功能:删除表中的第i个元素
输出:若删除成功,返回被删元素,否则抛出异常
后置条件:若删除成功,表中减少一个元素
Empty
前置条件:表已存在
输入:无
功能:判断表是否为空
输出:若是空表,返回1,否则返回0
后置条件:表不变
ADT
第2节
线性表的顺序结构及其实现
线性表的存储结构————顺序表
顺序表是一种随机存取的存储结构
顺序表的实现
顺序表类的声明
const int MaxSize=100;
template <class DataType> //模板类
class SeqList
{
public:
SeqList( ) ; //构造函数
SeqList(DataType a[ ], int n);
~SeqList( ) ; //析构函数
int Length( ); //线性表的长度
DataType Get(int i); // 按位查找,查找表中第i个元素
int Locate(DataType x ); //按值查找,线性表中查找值为x的元素序号
void Insert(int i, DataType x); //插入操作,在线性表的第i个元素插入值为x的元素
DataType Delete(int i); //删除操作,删除线性表的第i个元素
private:
DataType data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
(具体算法见课本25-19页)
例:template <class DataType>
void SeqList<DataType>::Insert(int i, DataType x)
{
if (length >= MaxSize) throw "上溢"; //判断是否表满
if (i < 1 || i > length + 1) throw "位置"; //判断位置插入是否合理
for (j = length; j >= i; j--) //最后一个元素至第i个元素分别后移1位
data[j] = data[j-1]; //将元素x填到位置i处
data[i-1] = x; //将元素x填入i处
length++; //表长加1
}
第三节
线性表的链接结构及其实现
线性表的链接存储结构————单链表
存储思想:用一组任意的存储单元存放线性表的元素
存储特点:
1.逻辑次序和物理次序
不一定相同。
2.元素之间的逻辑关系
用指针表示
data:存储数据元素
next:存储指向后继结点的地址
头结点:在单链表的第一个元素结点之前附设一个类型相同的结点,以便空表和非空表处理统一。
单链表类的声明
template <class DataType>
class LinkList
{
public:
LinkList( );
LinkList(DataType a[ ], int n);
~LinkList( );
int Length( );
DataType Get(int i);
int Locate(DataType x);
void Insert(int i, DataType x);
DataType Delete(int i);
void PrintList( );
private:
Node<DataType> *first;
};
(具体算法31-40页)
template <class DataType>
DataType LinkList<DataType> :: Delete(int i)
{
p = first ; count = 0; //工作指针初始化,累加器count初始化。
while (p != NULL && count < i - 1)//查找第i-1个节点
{
p = p->next;
count++;
}
if (p == NULL || p->next == NULL) throw "位置";
else {
q = p->next; x = q->data; //暂存被删节点
p->next = q->next; //摘链
delete q;
return x;
}
}
双链表:在单链表的每个结点中再设置一个指向其前驱结点的指针域。
顺序列表和链表的比较
1线性表需频繁查找却很少进行插入和删除操作,或其操作和元素在表中的位置密切相关时,宜采用顺序表作为存储结构;线性表需频繁插入和删除时,则宜采用链表做存储结构。
2线性表中元素个数变化较大或者未知时,最好使用链表实现;而如果用户事先知道线性表的大致长度,使用顺序表的空间效率会更高。
第四节
线性表的其他存储方式
1.静态链表
2.间接寻址
- 数据结构 第2章 线性表
- 数据结构(第2章: 线性表)
- 数据结构第2章线性表
- 《数据结构》第2章 线性表 知识点总结导图
- 线性表-第2章-《数据结构习题集》答案解析-严蔚敏吴伟民版
- 数据结构笔记整理第2章:线性表
- 《大话数据结构》第3章.线性表
- 2-10-归并扩展的线性单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 《大话数据结构》学习记录1--第1,2章和第3章的顺序线性表
- 【数据结构】第1周 线性表 2:字符串插入
- 线性表-约瑟夫问题(数据结构基础 第2周)
- 线性表-多项式加法(数据结构基础 第2周)
- 2-9-扩展的线性单链表(带头结点)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 第2章 线性表
- 第2章 线性表
- 第2章线性表
- 第2章 线性表
- 第2章 线性表
- Unity3D研究院之mac上从.ipa中提取unity3D游戏资源 (zz)
- C# 中 显示实现接口 与 隐式实现接口
- 4.有关日期格式属性修改常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面可以跟:列名、表达式、别名、序号
- TabHost小结
- 最深二叉树 (Maximum Depth of Binary Tree)
- 数据结构第2章线性表
- Andriod中Style/Theme原理以及Activity界面文件选取过程浅析
- 分布式与集群的区别
- include引入mergre布局
- hdu1042第一次用java
- 类模板笔记
- 如何定位Release程序崩溃原因
- typeof C中关键字
- 数组中只出现一次的数字