Data Structure
Upcoming SlideShare
Loading in...5
×
 

Data Structure

on

  • 1,610 views

 

Statistics

Views

Total Views
1,610
Views on SlideShare
1,608
Embed Views
2

Actions

Likes
1
Downloads
42
Comments
0

1 Embed 2

http://www.slideshare.net 2

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Data Structure Data Structure Presentation Transcript

  • 数 据 结 构 董娟
    • 一、 简介
    • 二、 线性结构
    • 三、 树形结构
    • 四、 图形结构
    • 五、 排序归纳
  • 一、 简介 1.1 什么是数据结构 1.2 基本术语 1.3 数据结构的分类 1.4 抽象数据类型 1.5 典型题解
  • 1.1 什么是数据结构
    • 数据结构
    • 研究数据的 逻辑结构 和 物理结构 以及它们之间相互 关系 ,并对这种结构定义相应的运算,而且确保经过这些算后所得到的新结构仍然是原来的结构类型。
  • 1.2 基本术语
    • 数据 (Data ): 是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
    • 数据元素 (Data Element ): 是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
    • 一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。
    • 数据对象 (Data Object) :是性质相同的数据元素的集合。是数据的一个子集。
    • 数据结构 (Data Structure) :是相互之间存在一种或多种特定关系的数据元素的集合。
  • 1.3 数据结构分类
    • 数据结构主要指逻辑结构和物理结构
    • 数据之间的相互关系称为逻辑结构。通常分为四类基本结构:
    • 一、 集合 结构中的数据元素除了同属于一种类型外,别无其它关系。
    • 二、 线性结构 结构中的数据元素之间存在一对一的关系。
    • 三、 树型结构 结构中的数据元素之间存在一对多的关系。
    • 四、 图状结构或网状结构 结构中的数据元素之间存在多对多的关系。
  • 1.3 数据结构分类
    • 数据结构在计算机中有两种不同的表示方法:
    • 顺序表示和非顺序表示
    • 由此得出两种不同的存储结构:
    • 顺序存储结构和链式存储结构
    • 顺序存储结构 : 用数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系 。
    • 链式存储结构: 在每一个数据元素中增加一个存放地址的指针( ),用此指针来表示数据元素之间的逻辑关系。
  • 1.4 抽象数据类型
    • ADT 抽象数据类型名 {
    • 数据对象: < 数据对象的定义 >
    • 数据关系: < 数据关系的定义 >
    • 基本操作: < 基本操作的定义 >
    • }ADT 抽象数据类型名
  • 1.5 典型题解
    • 以下属于逻辑结构的是( )。
    • A .顺序表 B. 哈希表 C. 有序表 D. 单链表
    • 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。 ( )
    • 排序
    • logn, n, nlogn, n 2 , n 3 , 2 n , n!,
  • 1.5 典型题解
    • 一个算法应该是( )。
    • A .程序 B .问题求解步骤的描述
    • C .要满足五个基本特性 D . A 和 C.
    •  
    • 以下哪个数据结构不是多型数据类型( )
    • A .栈 B .广义表 C .有向图
    • D .字符串
    • 连续存储设计时,存储单元的地址( )。
    • A .一定连续 B .一定不连续 C .不一定连续 D .部分连续,部分不连续
  • 二、 线性结构
    • 2.1 基本特点
    • 2.2 定义
    • 2.3 ADT 描述
    • 2.4 实例
  • 2.1 基本特点
    • 在数据元素的非空有限集中,
    • ( 1 )存在唯一的一个被称做“第一个”的数据元 素;
    • ( 2 )存在唯一的一个被称做“最后一个”的数据元素;
    • ( 3 )除第一个之外,集合中的每个数据元素均只有一个前驱;
    • ( 4 )除最后一个之外,集合中每个数据元素均只有一个后继。
  • 2.2 定义
    • 一个线性表是 n 个数据元素的有限序列。
    • 数据元素可以是一个数、一个符号、也可以是一幅图、一页书或更复杂的信息。
    • a1……. ai ai+1 …….an
    • ai 是 ai+1 的 直接前驱 元素 , ai+1 是 ai 的 直接后继 元素。
    • 线性表中元素的个数 n 定义为线性表的长度,为 0
    • 时称为空表。在非空表中的每个数据元素都有一个确
    • 定的位置。 ai 是第 i 个元素,把 i 称为数据元素 ai 在线性
    • 表 中的 位序 。
  • 2.3 ADT 描述
    • ADT List{
    • 数据对象 : D={ai| ai(-ElemSet,i=1,2,...,n,n>=0}
    • 数据关系 : R1={<ai-1,ai>| ai-1,ai(- D,i=2,...,n}
    • 基本操作:
    • InitList(&L) DestroyList(&L) ClearList(&L) ListEmpty(L) ListLength(L) GetElem(L,i,&e) LocateElem(L,e,compare()) PriorElem(L,cur_e,&pre_e) NextElem(L,cur_e,&next_e) ListInsert(&L,i,e) ListDelete(&L,i,&e) ListTraverse(L,visit()) union(List &La,List &Lb)
    • }ADT List
  • 2.4 实例
    • 堆栈      栈( Stack )是限制仅在表的一端进行插入和删除运算的线性表。    (1) 通常称插入、删除的这一端为 栈顶 ( Top ),另一端称为 栈底 ( Bottom )。    (2) 当表中没有元素时称为 空栈 。    (3) 栈为 后进先出 ( Last In First Out )的线性表,简称为 LIFO 表 。      栈的修改是按后进先出的原则进行。每次删除( 退栈 )的总是当前栈中 &quot; 最新 &quot; 的元素,即最后插入( 进栈 )的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
  • 2.4 实例
    • 队列的定义:
    • 线性表,简称为 FIFO 表 。    ( 1 )允许删除的一端称为 队头( Front ) 。   ( 2 )允许插入的一端称为 队尾( Rear ) 。   ( 3 )当队列中没有元素时称为 空队列 。   ( 4 )队列亦称作先进先出( First In First Out )的   队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(即不允许 &quot; 加塞 &quot; ),每次离开的成员总是队列头上的(不允许中途离队),即当前 &quot; 最老的 &quot; 成员离队。
  • 三、 树形结构
    • 3.1 基本特点
    • 3.2 定义
    • 3.3 形式
    • 3.4 遍历算法
  • 3.1 基本特点
    • 性质1: 二叉树第 i 层上的结点数目最多为 2 i-1 (i≥1) 。
    • 性质2: 深度为 k 的二叉树至多有 2 k -1 个结点 (k≥1) 。
    • 性质3:对任何一棵二叉树 T ,如果其终端结点数为 n0, 度为 2 的结点 数为 n2, 则 n0=n2+1 。
    • 性质4:具有 n 个结点的完全二叉树的深度为 | log2n|+1
    • 性质5:
    • 如果对一棵有 n 个结点的完全二叉树的结点按层序编号,则对任一结点 i(1=<i=<n) 有: (1) 如果 i=1, 则结点 i 是二叉树的根 , 无双亲 ; 如果 i>1, 则双亲 PARENT(i) 是结点 i/2 (2) 如果 2i>n, 则结点 i 无左孩子 ( 结点 i 为叶子结点 ); 否则其左孩子 LCHILD(i) 是结点 2i (3) 如果 2i+1>n, 则结点 i 无右孩子 ; 否则其右孩子 RCHILD(i) 是结点 2i+1
  • 3.2 定义
    • 定义:二叉树是由 n(n>=0) 个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。
    • 这是一个 递归 定义。二叉树可以是空集合,根可以有空的左子树或空的右子树 。
  • 3.3 形式 (a) 空二叉树 A A B A B A C B (b) 根和空的左右子树 (c) 根和左子树 (d) 根和右子树 图 6.8 二叉树的 5 种形式 (e) 根和左右子树
  • 3.4 遍历算法
    • 1 、 先序遍历二叉树 的操作定义为:
    • 若二叉树为空,则空操作;否则
    • ( 1 )访问根结点;
    • ( 2 )先序遍历左子树;
    • ( 3 )先序遍历右子树。
    • 2 、 中序遍历二叉树 的操作定义为:
    • 若二叉树为空,则空操作;否则
    • ( 1 )中序遍历左子树;
    • ( 2 )访问根结点;
    • ( 3 )中序遍历右子树。
  • 3.4 遍历算法
    • 3 、 后序遍历二叉树 的操作定义为:
    • 若二叉树为空,则空操作;否则
    • ( 1 )后序遍历左子树;
    • ( 2 )后序遍历右子树;
    • ( 3 )访问根结点。
  • 3.4 遍历算法
    • 中序遍历的算法实现      用二叉链表做为存储结构,中序遍历算法可描述为:       void InOrder(BinTree T)    { // 算法里① ~⑥ 是为了说明执行过程加入的标号           ① if(T) { // 如果二叉树非空           ②    InOrder(T->lchild) ;           ③    printf(&quot; % c&quot; , T->data) ; // 访问结点           ④    InOrder(T->rchild);           ⑤  }           ⑥ } // InOrder
  • 四、 图形结构
    • 4.1 定义
    • 4.2 ADT 定义
    • 4.3 常用术语
  • 4.1 定义
    • 图 是一种数据元素间为多对多关系的数据结构,加上一组基本操作构成的抽象数据类型。
  • 4.2 ADT 定义
    • ADT Graph{
    • 数据对象 V : V 是具有相同特性的数据元素的集合,称为顶点集。
    • 数据关系 R :
    • R={VR}
    • VR={<v,w>|v,w(-V 且 P(v,w),<v,w> 表示从 v 到 w 的弧,谓词 P(v,w) 定义了弧 <v,w> 的意义或信息 }
    • 基本操作 P :
    • CreateGraph(&G,V,VR);
    • 初始条件: V 是图的顶点集, VR 是图中弧的集合。
    • 操作结果:按 V 和 VR 的定义构造图 G
    • DestroyGraph(&G);
    • 初始条件:图 G 存在
    • 操作结果:销毁图 G
  • 4.2 ADT 定义
    • LocateVex(G,u);
    • 初始条件:图 G 存在, u 一 G 中顶点有相同特征
    • 操作结果:若 G 中存在顶点 u, 则返回该顶点在图中位置;否则返回其它信息。
    • GetVex(G,v);
    • 初始条件:图 G 存在, v 是 G 中某个顶点
    • 操作结果:返回 v 的值。
    • PutVex(&G,v,value);
    • 初始条件:图 G 存在, v 是 G 中某个顶点
    • 操作结果:对 v 赋值 value
    • FirstAdjVex(G,v);
    • 初始条件:图 G 存在, v 是 G 中某个顶点
    • 操作结果:返回 v 的第一个邻接顶点。若顶点在 G 中没有邻接顶点,则返回“空”
  • 4.2 ADT 定义
    • NextAdjVex(G,v,w);
    • 初始条件:图 G 存在 ,v 是 G 中某个顶点 ,w 是 v 的邻接顶点。
    • 操作结果:返回 v 的(相对于 w 的)下一个邻接顶点。若 w 是 v 的最后一个邻接点,则返回“空”
    • InsertVex(&G,v);
    • 初始条件:图 G 存在, v 和图中顶点有相同特征
    • 操作结果:在图 G 中增添新顶点 v
    • DeleteVex(&G,v);
    • 初始条件:图 G 存在, v 是 G 中某个顶点
    • 操作结果:删除 G 中顶点 v 及其相关的弧
    • InsertAcr(&G,v,w);
    • 初始条件:图 G 存在, v 和 w 是 G 中两个顶点
    • 操作结果:在 G 中增添弧 < v,w>, 若 G 是无向的,则还增添对称弧 <w,v>
  • 4.2 ADT 定义
    • DeleteArc(&G,v,w);
    • 初始条件:图 G 存在, v 和 w 是 G 中两个顶点
    • 操作结果:在 G 中删除弧 <v,w>, 若 G 是无向的,则还删除对称弧 <w,v>
    • DFSTraverser(G,v,Visit());
    • 初始条件:图 G 存在, v 是 G 中某个顶点, Visit 是顶点的应用函数
    • 操作结果:从顶点 v 起深度优先遍历图 G ,并对每个顶点调用函数 Visit 一次。一旦 Visit() 失败,则操作失败。
    • BFSTRaverse(G,v,Visit());
    • 初始条件:图 G 存在, v 是 G 中某个顶点, Visit 是顶点的应用函数
    • 操作结果:从顶点 v 起广度优先遍历图 G ,并对每个顶点调用函数 Visit 一次。一旦 Visit() 失败,则操作失败。
    • }ADT Graph
  • 4.3 常用术语
    • 如果用 n 表示图中顶点数目,用 e 表示边或弧的数目,则有:
    • 对于 无向图 , e 的取值范围是 0 到 n(n-1)/2, 有 n(n-1)/2 条边的无向图称为完全图。
    • 对于 有向图 , e 有取值范围是 0 到 n(n-1) 。具有 n(n-1) 条弧的有向图称为有向完全图。
    • 有很少条边或弧的图称为 稀疏图 ,反之称为 稠密图 。
  • 五、 排序归纳
    • 5.1 平均时间
    • 5.2 各种条件的选择
  • 5.1 平均时间
    • ( 1 )平方阶 (O(n 2 )) 排序      一般称为简单排序,例如直接插入、直接选择和冒泡排序; ( 2 )线性对数阶 (O(nlgn)) 排序      如快速、堆和归并排序; ( 3 ) O(n 1+ £ ) 阶排序      £是介于 0 和 1 之间的常数,即 0< £ <1 ,如希尔排序; ( 4 )线性阶 (O(n)) 排序      如桶、箱和基数排序。
  • 5.2 各种条件的比较
    • (1) 若 n 较小 ( 如 n≤50) ,可采用直接插入或直接选择排序。 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
    • (2) 若文件初始状态基本有序 ( 指正序 ) ,则应选用直接插人、冒泡或随机的快速排序为宜;
    • (3) 若 n 较大,则应采用时间复杂度为 O(nlgn) 的排序方法:
    • 快速排序、堆排序或归并排序。 并且这三种方法中只有归并是稳定的。
  • 5.2 各种条件的比较
    • (4) 在基于比较的排序方法中,每次比较两个关键字的大小之后,仅仅出现 两种可能 的转移,因此可以用一棵二叉树来描述比较判定过程。      当文件的 n 个关键字随机分布时,任何借助于 &quot; 比较 &quot; 的排序算法,至少需要 O(nlgn) 的时间。