数据结构及其应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

有限长的操作步骤序列,则重于解决问题
的方法和步骤。当算法由计算机语言表示
时称为程序(代码)
算法设计目标:可维护性
可靠性(正确性、健壮行)
可读性
高效率(时间、空间)
2020/5/25
6
第二章 线性表
2。1 线性表的逻辑结构 定义:由相同种类的数据元素组成的一个有穷
序列称为一个线性表。“一个跟着一个”
if (i<0||i>last+1||last==Maxsize-1) return 0; else {
last++; for(int j=last;j>i;j--) data[j]=data[j-1]; data[i]=x; return 1; } }
2020/5/25
16
(4)顺序表删除操作
为了删除第 i 个元素,必须把从 i+1 到 last 的所有元素 向前移动一个元素位置,把第 i 个元素覆盖掉:
friend Polynomial; // 定义 Polynomial 类为 term 类的友元类 private :
float coef; // 系数 int exp; // 指数 }
2020/5/25
24
多项式的类定义——数据的表示方法
class Polynomial
{
public :
...
// 成员函数声明(构造、释构、相加等函数)
——数据的组织方法
系数 c0 c1 . . . ci 指数 e0 e1 . . . ei
. . . cn ... . en .
2020/5/25
23
多项式二元组的类定义——客体的表示方法
class Polynomial; // 多项式类的前视声明 class term // 多项式中项(二元组)的类定义 {
的研究和发展以及其体系的完善。
2020/5/25
2
基本术语
数 据:描述客观事物的且能由计算机处理的数
值、字符等符号
数据元素:数据的基本单位,在计算机程序中通常
作为一个整体进行考虑和处理(记录、 结点、表目、元素)
数 据 项:数据元素的某一属性。数据元素可以由
若干数据项组成,数据项可以由若干 更小的款项(组合项、原子项)组成。 数据项又称域、字段
0 1 . . . i-1 i i+1 . . .
...
...
last-1 last ...
1 2 ...
2020/5/25
17
template <class Type> int Seqlist<Type>::Remove(Type & x) //将 x 从表中删除。若 x 在表中并成功删除则返回 1, //否则返回 0 {
if (k==-1)
// 未找到
{ LA.Insert( x ,n); // 将该元素追加到 LA 中
n++;
}
}
}
2020/5/25
20
template < class Type >
void Intersection( Seqlist <Type> & LA,Seqlist <Type> & LB)
if ( k== - 1)
// 未找到
{ LA.Remove( i ); n--;} // 则从 LA 中删除该元素
else i ++;
}
}
2020/5/25
21
多项式及其运算
n
A(x)=a0x
0
+
a1x
a x 1
+2
a x a x 2
n-1
+…+ n-1 + n
n =
Σ
aixi
i=0
B(x)=b0x
2020/5/25
10
上述顺序表定义中的数据成员 Maxsize 是为判断顺序 表是否为满而设,last 是为便于判断顺序表是否为空、求 表长、置空表而设:
last=Maxsize –1表示顺序表已满,此时再进行插入 操作会导致上溢错误;
last=-1 表示顺序表为空表,此时再进行删除操作 会导致下溢错误;
//查找 x 在表中位置,若查找成功,函数返回 x 的位置 //否则返回-1 {
int i=0; while(i<=last && data[i]!=x) i++; if (i>last) return –1; else return i; }
2020/5/25
14
(3)顺序表插入操作
为了把新元素 x 插入到 i 处,必须把从 i 到 last 的所 有元素成块向后移动一个元素位置,以空出第 i 个位 置供 x 插入:
int i=Find(x); if (i>=0) {
last--; for (int j=i;j<=last;j++) data[j]=data[j+1]; return 1; } return 0; }
2020/5/25
18
顺序存储结构的优缺点
优点:
(1)算法简单、可读性好、开发代价低
缺点:
数据元素
数据元素
关系
Ei
E i+1
物理结构:数据结构在计算机中的具体表示和实现,
又称存储结构
2020/5/25
4
数据结构的分类
按逻辑结构分类:
纯集合型结构:数据元素之间除了“同属于一个集合”这
一 关系外,别无其他关系
线性结构:数据元素之间存在“一个跟着一个”的序列关

树型结构:数据元素之间存在“每个元素只能跟着一个元
//构造函数,通过指定参数 sz 定义数组的长度,并将 last 置为 –1
//即置空表
{
if(sz>0)
{
Maxsize=sz;
last=-1;
// last+1=0 , 表明表中无元素,空表
data=new Type[Maxsize];
}
}
2020/5/25
13
(2)顺序表查找操作
template <class Type> int Seqlist<Type>::Find(Type & x) const
// 合并顺序表 LA 与 LB ,重复元素只留一个,结果在 LA 中。
{ int n=LA.Length();
int m=LB.Length();
for (int i=0;i<=m-1;i++)
{
Type x=LB.Get(i); // 从顺序表 LB 中取一元素
int k=LA.Find(x); // 在顺序表 LA 中查找该元素
符号表示法:L=(e1,e2,…en)
图形表示法:
e1
e2
en
2020/5/25
7
e 其中: i ---表示线性表 L 的第 i 个数据元素
n ---表示线性表 L 的表长(n>=0) n=0 时的线性表称为空表
e e e e i-1 称为 i 的前驱, i+1 称为 i 的后继
线性表的基本操作:
0 . . . i-1 i i+1 . . .
last
...
...
...
... 3 2 1
x
先移动后面元素
2020/5/25
15
template <class Type> int Seqlist<Type>::Insert(Type & x, int i) //将 x 插入表中 i 处,若成功返回 1 ,否则返回 0 {
// 求顺序表 LA 与 LB 的共同元素,结果在 LA 中
{
int n = LA.Length( );
int m = LB.Length( );
int i = 0;
while ( i < n )
{
Type x = LA.Get( i ); // 从 LA 中取一元素
int k = LB.Find( x ); // 在 LB 中查找该元素
数据元素本身的存贮 数据元素之间关系的存贮
定义:利用内存物理结构上的邻接特点,实现线性表
的“一个跟着一个”这一序列关系的存贮方式, 称为线性表的顺序存贮结构,其上的线性表称 为顺序表。
顺序表的类定义:利用数组作为顺序表的存储结构,
它被封装在类的私有域中
2020/5/25
9
template <class Type> class SeqList { Public: SeqList(int MaxSize=defaultSize); ~SeqList( ) {delete [ ] data;} int Length( ) const {return last+1;} int Find(Type & x) const; int Insert(Type & x,int i); int Remove(Type & x); int IsEmpty( ) {return last = = - 1;} int Isfull( ) {return last = =MaxSize – 1 ;} Type & Get( int i ) {return i <0 || i >last ? NULL : data[i];} Private: Type * data; // 用数组存放线性表——顺序存贮结构 int Maxsize; // 数组大小,但顺序表的长度为 last+1 int last; }// last 为表中最后元素的下标,last=-1 时表示空表
0
+
b1x
b x 1
+2
b x b x 2
n-1
+…+ n-1 + n
n =
Σ bixi
n
i=0
A(x)+B(x)= Σ (ai+bi)x i
i=0
实际应用中,上述一元多项式中的很多系数有可能为零,
即为稀疏多项式,如下式所示:
P
(x)=1.2+51.3x
+ . x 50
101
37
5
P(x)=Σc x n
数据结构及其应用
(用面向对象方法与C++描述)
2020/5/25
1
第一章 概述
研究对象:信息的表示方法、数据的组织方法、操作算法设计
意义地位:数据结构+算法=程序
程序设计的基础
系统软件的核心
发展过程:数值计算
非数值计算
建立数学模型 客体及其关系的表示
设计数值计算方法
数据的组织 操作算法的设计
非数值计算应用的发展,促进了数据结构
素 但可以有多个元素跟着它”的层次关系
图状结构:任意两个数据元素之间都可能存在关系
按存储结构分类:
顺序存储结构
链式存储结构
2020/5/25 索引存贮结构
5
基本操作:任一数据结构均有一组相应的基本操作,
有时操作不同,用途迥异(如栈和队列)
常用的基本操作有插入、 删除、查找、
更新、排序等

法:算法是为了解决给定的问题而规定的一个
ei
i
0 c0=1.2 e0=0 c1=51.3 e1=50
i=0
c2=3.7 e2=101
2020/5/25
22
多项式的表示
对于稀疏多项式,采用二元组表示法可以大大节省存储 空间:
(1)将稀疏多项式的每一项用二元组< ci , ei >表示
——客体的表示方法 (2)用一顺序表(一维数组)来存放上述的二元组
关 键 码:能起唯一标识(数据元素)作用的数据项 数据结构:一组同类的数据元素、其间的关系及其上的
一组操作所构成的整体,称为一个数据结构
2020/5/25
3
数据结构的描述方式
逻辑结构:是对数据元素之间逻辑关系(抛开具体
的关系含义以及存储方式等)的描述,它可以用一个 数据元素的集合和定义在此集合上的几个关系来表示。 通常可用图形表示,圆圈表示数据元素,箭头表示关 系:
private :
int MaxTerms ; //共享空间(顺序表)的最大项数
变量
0 Maxsize
1
last
...
last 数组下标
Maxsize-1
...
...
操作算法 初始化操作 插入操作 删除操作 查找操作 排序操作
......
2020/5/25
12
顺序表的基本操作(算法)
(1)顺序表初始化操作算法
template <class Type> Seqlist<Type>::Seqlist(int sz)
(1)插入、删除操作时需要移动大量元素, 效率较低;
(2)最大表长难以估计,太大了浪费空间, 太小了容易溢出。
2020/5/25
19
顺序表应用举例
当将两个顺序表作集合考虑时的“并”与“交”操作算法
template <class Type>
void Union(Seqlist <Type> & LA,Seqlist <Type> & LB)
last+1 代表顺序表的表长; 将 last Baidu Nhomakorabea值为 –1 可实现置空表操作。
由上可知:合理地设置数据成员可大大简化算法的设计 及提高算法的效率。顺序表不仅仅包含存放其数据元 素的数组,它还应包括一些有用的数据成员,以及相 应的操作,它们是一个整体:
2020/5/25
11
顺序表之整体概念:
数组 data
(1)初始化(置空表)——可由构造函数实现 (2)求表长( Length ) (3)查找或定位( Find )
(4)插入( Insert ) (5)删除( Remove ) (6)排序( Sort )
(7)判空( IsEmpty)
2020/5/25
8
2.2 线性表的顺序存储结构
要实现在计算机内表示一个数据结构,要解决两 种信息的存贮问题:
相关文档
最新文档