- 0
- 0
- 约3.91千字
- 约 7页
- 2019-06-14 发布于江西
- 举报
PAGE
2
第2章 线性表
线性结构:在数据元素的非空集中,
①存在唯一的一个首元素,
②存在唯一的一个尾元素,
③除首元素外每个元素均只有一个直接前驱,
④除末元素外每个元素均只有一个直接后继。
1 逻辑结构
数据结构的形式定义:
Linear_list=(D,S,P)
D = {ai| ai∈ElemSet, i=0,1,2,…,n-1}
S = {ai-1,ai| ai-1,ai∈D, i=1,2,…,n-1}
ai-1,ai为序偶,表示前后关系
意义:明确了首元素、尾元素、直接前驱、直接后继的定义。
数据类型的框架定义(vector,list)
class List
{
public:
List();
virtual ~List();
// 基本操作
int Length(); // 求长度
void Output(); // 遍历/输出
void Insert(int i, T e); // 插入
void Delete(int i); // 删除
T Get(int i); // 按位查找
int Search(T e); // 按值查找
// 基本算法:组合功能
void Reverse(); // 逆序
void Sort(); // 排序
void Merge(List L); // 合并
// 基本算法:集合运算
List Union(List L); // 集合并
List Inter(List L); // 集合交
// 应用算法:多项式运算
…………
};
2 顺序线性表
2.1 类的定义
逻辑结构中的“前后关系”:物理结构中的“相邻关系”
loc(ai)=loc(a0)+i*sizeof(单个数据元素)
注意:第i个元素的下标是i-1
静态顺序存储结构:
const int MaxSize=100;
class SeqList
{
private:
T m_Data[MaxSize]; // 存放数据元素的数组
int m_Length; // 线性表的长度
……………
}
动态顺序存储结构:(vector)
class SeqList
{
private:
T *m_Data; // 存放数据元素的连续空间
int m_Size; // 线性表的空间大小
int m_Length; // 线性表的长度
……………
}
延伸思考:表长变化与空间变化的关系
Insert(1)
1
Insert(2)
1
2
Insert(3)
1
2
3
Insert(4)
1
2
3
4
Insert(5)
1
2
3
4
5
Insert(6)
1
2
3
4
5
6
Insert(7)
1
2
3
4
5
6
7
Insert(8)
1
2
3
4
5
6
7
8
Insert(9)
1
2
3
4
5
6
7
8
9
2.2 基本操作
/////////////////////////////////
// 项目路径:1SeqList整数顺序表
/////////////////////////////////
2.2.1
// “静态顺序存储结构”版本
SeqList::SeqList(){ m_Length=0; }
SeqList:: ~SeqList( ){ }
SeqList::SeqList(int a[], int n)
{ if(nMaxSize) throw 参数非法;
for(int i=0; in; i++) m_Data[i]=a[i];
m_Length=n;
}
//“动态顺序存储结构”版本
空间的分配/回收
2.2.2 简单“读/写”操作
// 取第i个元素的值
int SeqList::Get(int i)
{ if(i1 im_Length) throw 查找位置非法;
return m_Data[i-1];
}
// 对第i个元素赋值
void SeqList::Set(int i,int e)
{ if(i1 im_Length) throw 查找位置非法;
m_Data[i-1] = e;
}
// 输出所有元素
void SeqList::Output()
{ for(int i=0;im_Length;i++)
coutm_Data[i] ;
coutendl;
}
2.2.3
// 将e插入
原创力文档

文档评论(0)