数据结构西安交通大学精品课程软件开发技术基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性表是由有限个同类型的数据元素组 成的有序序列,一般记作(a1,a2,…,an)。 除了a1和an之外,任意元素ai都有一个直接 前趋ai-1和一个直接后继ai+1。 a1无前趋,an 无后继。
线性表的存储结构主要有顺序存储结构 和链式存储结构两种。
顺序表
采用顺序存储结构的线性表称为顺序表,它的数 据元素按照逻辑顺序依次存放在一组连续的存储单 元中。逻辑上相邻的数据元素,其存储位置也彼此 相邻。
算法分析
1. 时间复杂度
一个算法花费的时间与算法中语句的执行次
数成正比,哪个算法中语句执行次数多,它花费 时间就多。
数据结构中数据元素个数n称为问题的规模, 当n不断变化时,语句的执行次数也会变化。一 个算法中的时间复杂度一般用语句执行次数的数 量级来衡量。
例如: for(i=1; i<=n; i++)
是指相互之间存在一种或多种特定关系的 数据元素所组成的集合。数据结构包含三个方 面的内容,即数据的逻辑结构,数据的存贮结 构和对数据Leabharlann Baidu施加的运算。
这三个方面的关系为:
• 数据的逻辑结构独立于计算机,是数据本身所固 有的
• 存贮结构是逻辑结构在计算机存贮器中的映像, 必须依赖于计算机。
• 运算是指所施加的一组操作总称。运算的定义直 接依赖于逻辑结构,但运算的实现必依赖于存贮 结构。
顺序表的主要算法
(1)在表中第 i 个位置插入新元素x
算法实现的主要步骤是: ① 判断插入位置的合理性以及表是否已满。 ② 从最后一个元素开始依次向前,将每个元 素向后移动一个位置,直到第i个元素为止。 ③ 向空出的第i个位置存入新元素x。 ④ 最后还要将线性表长度加一。
序号
内容
0
a1
1
a2
2
a3
//在表中第 i 个位置插入新元素x
void ListInsert( int i, ElemType x );
int Find( ElemType x );
//在表中查找元素
};
(1)ElemType代表数组的某种类型。
(2)length表示线性表当前长度,初始长度 为0(空表),最大不超过maxsize。
数据结构的形式定义
数据结构是一个二元组
Data_Structure=(D,S)
其中:
• D是数据元素的有限集合 • S是D上关系的有限集合。 举 例 : 复 数 Complex=(C,R) , 其 中 : C 是 两 个
实数的集合,R是C中两个实数的偶对。
数据结构基本类型
• 线性结构 —— 通迅录、成绩单、花名册 • 树形结构 —— 电子字典、家谱、目录 • 图状结构 —— 交通线路、通信网络
算法(algorithm)
通俗地讲,算法就是一种解题的方法。更严格地说, 算法是由若干条指令组成的有穷序列,它必须满足下述 条件(也称为算法的五大特性):
(1)输入:具有0个或多个输入的外界量(算法开始前 的初始量)
(2)输出:至少产生一个输出,它们是算法执行完后的 结果。
(3)有穷性:每条指令的执行次数必须是有限的。 (4)确定性:每条指令的含义都必须明确,无二义性。 (5)可行性:每条指令的执行时间都是有限的。
数据结构中常用的存贮结构
(1) 顺序存贮
所有元素存放在一片连续的存贮单元中,逻辑上 相邻的元素存放到计算机内存仍然相邻。
(2) 链式存贮
所有元素存放在可以不连续的存贮单元中,元素 之间的关系通过地址确定,逻辑上相邻的元素存 放到计算机内存后不一定是相邻的。
(3) 索引存贮(略)
(4) 散列存贮(略)
假定元素a1的物理地址是Loc(a1),每个元素占d 个存储单元,则第i个元素的存储位置为:
Loc(ai) = Loc(a1) + (i-1) * d
length=n
a1 a2 … ai-1 ai ai+1 … an
01
i-2 i-1 i
n-1
maxsize
顺序表类描述
const int MAXSIZE=100;
{
if( i<1 || i>length+1 || length==MAXSIZE )
cout<<"插入位置错误或表满";
else {
for( int j=length-1;j>=i-1;j-- ) {
data[j+1] = data[j]; // 元素依次向后移动
//顺序表最大允许长度
class SeqList
{
public:
ElemType data[MAXSIZE]; // 存储数据的数组
int length;
// 顺序表当前长度
SeqList() { length=0; }
//构造函数
void ClearList() { length=0; } //将顺序表置为空表
for(j =1; j<=i; j++)
O(n2)
d[i][j]=data[i][j]+1;
2. 空间复杂度
与时间复杂度类似,空间复杂度是指算法 在计算机内执行时所占用的内存开销规模。但 我们一般所讨论的是除正常占用内存开销外的 辅助存储单元规模。讨论方法与时间复杂度类 似,不再赘述。
2.2 线性数据结构
2.1 数据结构基本概念
1.数据(data)
数据是指能够输入到计算机中,并被计算机识 别和处理的符号的集合。
2.数据元素(data element)
数据元素是组成数据的基本单位。数据元素是 一个数据整体中相对独立的单位。但它还可以分 割成若干个具有不同属性的项(字段),故不是 组成数据的最小单位
数据结构(data structure)


i-2
a i-1
i-1
ai
i
a i+ 1


n
an


m a x size
序号
内容
0
a1
1
a2
2
a3


i-2
a i-1
i-1
x
i
ai


n
a n -1

an
m a x size
插入前
插入后
顺序表中插入元素前后状态
void SeqList::ListInsert( int i, ElemType x )
//判断顺序表是否为空表
bool IsListEmpty() {return length==0;}
( 下页continue …. )
( 接上页 )
//判断顺序表是否为满
bool IsListFull() {return length==MAXSIZE;}
//在表中删除第i个元素
void ListDelete( int i );
相关文档
最新文档