当前位置:
文档之家› 数据结构及其应用data_structrue
数据结构及其应用data_structrue
的关系含义以及存储方式等)的描述,它可以用一个 数据元素的集合和定义在此集合上的几个关系来表示。 通常可用图形表示,圆圈表示数据元素,箭头表示关 系:
数据元素 数据元素 关系
Ei
E i+1
物理结构:数据结构在计算机中的具体表示和实现,
又称存储结构
2014-7-15
4
数据结构的分类
按逻辑结构分类:
2014-7-15
10
上述顺序表定义中的数据成员 Maxsize 是为判断顺序 表是否为满而设,last 是为便于判断顺序表是否为空、求 表长、置空表而设: last=Maxsize –1表示顺序表已满,此时再进行插入 操作会导致上溢错误; last=-1 表示顺序表为空表,此时再进行删除操作 会导致下溢错误; last+1 代表顺序表的表长; 将 last 赋值为 –1 可实现置空表操作。 由上可知:合理地设置数据成员可大大简化算法的设计 及提高算法的效率。顺序表不仅仅包含存放其数据元 素的数组,它还应包括一些有用的数据成员,以及相 应的操作,它们是一个整体:
2014-7-15
24
多项式的类定义——数据的表示方法 class Polynomial { public : ... // 成员函数声明(构造、释构、相加等函数) private : int MaxTerms ; //共享空间(顺序表)的最大项数 static term termArray[MaxTerms]; //存放二元组的数组,存放多个多项式的共享空间 static int free ; // 共享空间中自由空间之起始下标 int start , finish ; // 多项式在共享空间中的首、尾下标 }
2014-7-15 6
第二章 线性表
2 。1 线性表的逻辑结构 定义:由相同种类的数据元素组成的一个有穷
符号表示法:L=(e1,e2,…en) 图形表示法:
序列称为一个线性表。“一个跟着一个”
e1
2014-7-15
e2
en
7
其中:
ei ---表示线性表 L 的第 i 个数据元素
n ---表示线性表 L 的表长(n>=0) n=0 时的线性表称为空表
22
多项式的表示 对于稀疏多项式,采用二元组表示法可以大大节省存储 空间: (1)将稀疏多项式的每一项用二元组< ci , ei >表示 ——客体的表示方法 (2)用一顺序表(一维数组)来存放上述的二元组 ——数据的组织方法
系数
指数
c0 c 1 e0 e1
. . . ci . . . ei
. . . cn .. . . en .
2014-7-15 8
2.2 线性表的顺序存储结构
要实现在计算机内表示一个数据结构,要解决两 种信息的存贮问题: 数据元素本身的存贮 数据元素之间关系的存贮
定义:利用内存物理结构上的邻接特点,实现线性表
的“一个跟着一个”这一序列关系的存贮方式, 称为线性表的顺序存贮结构,其上的线性表称 为顺序表。
2014-7-15
21
多项式及其运算
n
A(x)=a x + a x +a x +…+an- x a x Σ aix i nn B(x)=b x + b x n +b x +…+bn- x +bnx = Σ bix i A(x)+B(x)= Σ (ai+bi)x
0 0 1 0 1 2 2 1
n-1 + n
//即置空表
{ if(sz>0) { Maxsize=sz; last=-1; // last+1=0 , 表明表中无元素,空表 data=new Type[Maxsize]; } }
2014-7-15 13
(2)顺序表查找操作 template <class Type> int Seqlist<Type>::Find(Type & x) const //查找 x 在表中位置,若查找成功,函数返回 x 的位置 //否则返回-1 { int i=0; while(i<=last && data[i]!=x) i++; if (i>last) return –1; else return i; }
2014-7-15
14
(3)顺序表插入操作 为了把新元素 x 插入到 i 处,必须把从 i 到 last 的所 有元素成块向后移动一个元素位置,以空出第 i 个位 置供 x 插入:
0 ...
...
i-1 i
i+1
... ... ...
last
...
3
2
1
x
先移动后面元素
2014-7-15
15
template <class Type> int Seqlist<Type>::Insert(Type & x, int i) //将 x 插入表中 i 处,若成功返回 1 ,否则返回 0 { 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; } }
2014-7-15 20
template < class Type > void Intersection( Seqlist <Type> & LA,Seqlist <Type> & LB) // 求顺序表 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 中查找该元素 if ( k== - 1) // 未找到 { LA.Remove( i ); n--;} // 则从 LA 中删除该元素 else i ++; } }
2014-7-15 16
(4)顺序表删除操作 为了删除第 i 个元素,必须把从 i+1 到 last 的所有元素 向前移动一个元素位置,把第 i 个元素覆盖掉:
0
1
... ...
i-1
i i+1
... ... ...
last-1 last ...
1
2
2014-7-15
17
template <class Type> int Seqlist<Type>::Remove(Type & x) //将 x 从表中删除。若 x 在表中并成功删除则返回 1, //否则返回 0 { int i=Find(x); if (i>=0) { last--; for (int j=i;j<=last;j++) data[j]=data[j+1]; return 1; } return 0; }
数据结构及其应用
(用面向对象方法与C++描述)
2014-7-15
1
第一章 概述
研究对象:信息的表示方法、数据的组织方法、操作算法设计 意义地位:数据结构+算法=程序
程序设计的基础 系统软件的核心
发展过程:数值计算
建立数学模型 设计数值计算方法
非数值计算
客体及其关系的表示 数据的组织 操作算法的设计
2014-7-15
11
顺序表之整体概念:
数组
0
1
data
变量
Maxsize last
操作算法
初始化操作 插入操作
last 数组下标 ... Maxsize-1
2014-7-15
... ...
删除操作
查找操作
排序操作
......
12
顺序表的基本操作(算法)
(1)顺序表初始化操作算法 template <class Type> Seqlist<Type>::Seqlist(int sz) //构造函数,通过指定参数 sz 定义数组的长度,并将 last 置为 –1
ei
-1
称为
ei 的前驱,ei
+1
称为
ei 的后继
线性表的基本操作:
(1)初始化(置空表)——可由构造函数实现 (2)求表长( Length ) (3)查找或定位( Find )
(4)插入( Insert ) (5)删除( Remove ) (6)排序( Sort ) (7)判空( IsEmpty)
若干数据项组成,数据项可以由若干 更小的款项(组合项、原子项)组成。 数据项又称域、字段
关 键 码:能起唯一标识(数据元素)作用的数据项 数据结构:一组同类的数据元素、其间的关系及其上的
一组操作所构成的整体,称为一个数据结构
3
2014-7-15
数据结构的描述方式
逻辑结构:是对数据元素之间逻辑关系(抛开具体
2014-7-15
23
多项式二元组的类定义——客体的表示方法 class Polynomial; // 多项式类的前视声明 class term // 多项式中项(二元组)的类定义 { friend Polynomial; // 定义 Polynomial 类为 term 类的友元类 private : float coef; // 系数 int exp; // 指数 }