计算机导论课件-第6章 数据结构

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

2.数据结构
6.1 数据结构基本概念
数据结构是指数据对象(集合)以及该数据对象中的数据元素之间的相 互关系的集合(即数据元素的组织形式)。可以用一个二元组公式表示
B = ( D,R)
数据结构
有穷的结点集合
D中结点间的 有穷关系集合
6.1 数据结构基本概念
3.逻辑结构和物理结构
(1)逻辑结构
二元组(D,R)是指数据元素之间的逻辑关系,称为数据的逻辑结构; 即从逻辑关系上描述数据,与数据的存储无关,独立于计算机。
6.2 表结构
6.2.1 线性表的基本概念
3.线性表的存储 线性表基本存储方式有顺序存储和链式存储;采用顺序存储方式的线性 表称为顺序表,采用链式存储方式的线性表称为链表。 4.线性表的运算 线性表的运算主要有查找、插入、删除、更新、存取、合并、分裂、复 制和排序等,其中查找、插入、删除是最基本、最常用的运算。
LIFO表
退栈方向
进栈方向
top
x
栈顶指针

b a
6.2.4 栈和队列
6.2 表结构
1.栈和队列的基本概念 (2)队 只允许在一端进行插入,在另一端进行删除的表结构称为队(queue)
先进先出表 FIFO表
出队
进队
a bc …
x
first
last
6.2.4 栈和队列
6.2 表结构
2.顺序栈和链栈 (1)顺序栈 栈的顺序存储结构简称为顺序栈,用数组来实现顺序栈。 栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何 一个端点;栈顶位置是随着进栈和退栈操作而变化的。
6.2.4 栈和队列
6.2 表结构
2.顺序栈和链栈 (2)链栈 栈的链式存储结构简称为链式栈,用链表来实现。 链式栈只要内存有空间就可扩充; 链式栈的栈顶设在链头;
6.2.4 栈和队列
6.2 表结构
2.顺序队、循环队和链队 (1)顺序队 本质上是运算受限的顺序表,可用数组来实现。 初始状态(队空条件):front==rear==0。 进队操作:队不满时,先送值到队尾元素,再将队尾指针加1。 出队操作:队不空时,先取队头元素值,再将队头指针加1。
6.2.2 顺序表
6.2 表结构
1.顺序表的定义
将线性表中的数据元素相继存放在一个连续的存储空间中,即把逻辑上 相邻的数据元素存储在物理上也相邻的存储单元中。
特点:结点的逻辑次序与物理次序相一致。 优点:可以随机存取表中任一元素; 缺点:
(1)在插入或删除某一元素时,平均要移动一半的数据元素,平均 时间复杂度O(n)。
6.3 树结构
6.3.1 树的基本概念
1. 树的 度是3 2. J的度 是3 3. 树的高度是4 4. 根结点是G 5. 叶子结点:KLIPNO 6. 分支结点:GHJM 7. M在第3层
1. 树的度? 2. J的度? 3. 树的高度? 4. 根结点是? 5. 哪些是叶子结点? 6. 哪些是分支结点? 7. 结点M在第几层? 8. M的双亲结点 ? 9. M的祖先结点? 10. i的兄弟结点 11. 哪些 结点 是堂兄弟 结点? 12. J的子孙结点?
散结构: 仅同属一个集合(集合)
表结构: 一对一(1:1)
线性
树结构: 一对多(1:n) 图结构: 多对多 (m:n)
非线性
树、散是图的特例,表是树的特例
6.1 数据结构基本概念
3.逻辑结构和物理结构
(2)物理结构 数据结构在计算机内存中的表示称为物理结构,又称存储结构。通常, 数据在计算机中的存储方式有两种:顺序存储和链式存储。
6.2.3 链式表
6.2 表结构
1.链式表的定义 每个表元素对应链表的一个结点:
值域(value field)用来存储表元素值 链域(link field)用来存储相邻结点的地址 表尾结点的链域值为空(NULL,即常数0) 用首指针(如,变量head)指向第一个结点 链表是线性表的一种存储形式,就是表头指针和一串相继链接的结点的 总称
6.2.4 栈和队列
6.2 表结构
2.顺序队、循环队和链队 (2)循环队
特点:重复使用已退队元素所占存储单元!
6.2.4 栈和队列
6.2 表结构
2.顺序队、循环队和链队
(3)链队
链式队采用单向加头链表结构
进队: 将新结点插在表尾处,last移向新结点
出队: 将队头元素所占结点作为新的头结点 (头结点不固定)释放原来的头结点 first和last同时指向头结点作为队空的判断条件
6.1 数据结构基本概念
1.数据、数据元素和数据项
学号 6201001 6201002 6201003 6201004 ...
姓名 张三 李四 王五
语文 85 92 87
数学 54 84 74
java 92 64 73
一个数据元素 一个数据项
整个表的记录是学生成绩数据
三者之间的关系:数据 > 数据元素 > 数据项
//输出线性表中的元素
int Search(int x);
//在表中顺序搜索x
int binarySearch(int x); //二分查找
int Insert(int x, int i) ; //在索引i处插入x
int insertx(int x);
//有序插入
int Remove(int i);
6.1 数据结构基本概念
1.数据、数据元素和数据项
(2)数据元素 数据元素也称数据结点,简称结点(node)。描述一个独立事物的名称 、数量、特征、性质的一组相关信息组成一个数据结点,是数据的基本单 位。 (3)数据项 通常,一个结点含有多个数据项(data item),每个数据项是结点的 一个域,而唯一标识一个结点的域称为关键字域。数据项是数据不可分割 的最小单位。
8. M的双亲结点:J 9. M的祖先结点:M J G(真祖先J G) 10. i的兄弟结点 :H J 11. 堂兄弟 结点:K和M N O, L 和 MNO 12. J的子孙结点:J MNOP(真子孙 MNOP)
6.3.2 二叉树
6.3 树结构
1.二叉树的定义 二叉树(binary tree)也称二分树,是二元位置树 每个结点最多有两个儿子(左儿子、右儿子) 结点的两棵子树叫做左子树和右子树 多数情况下,左右儿子的含义不同
6.2 表结构
6.3.1 树的基本概念
你见过家族谱系图吗?试以图形表示从你的祖父起的家族成员关系。
祖父 伯父 父亲 叔父
堂兄 堂姐 你 堂弟
侄儿
6.3 树结构
6.3.1 树的基本概念
1.树的定义 树(tree)是n(n≥0)个结点的集合 若n=0,是一棵空树(null tree)
n=1,是一棵单结点树 n>1,其中一个结点是树的根结点,简称根(root),其余结点被划 分成若干个子集,每个子集都单独构成一棵树,它们都是根的子树( subtree)
(2)表的容量难以确定。 (3)易产生存储空间碎片。
6.2 表结构
6.2.2 顺序表
Baidu Nhomakorabea
2.顺序表类
class SeqList1 {
public:
SeqList1(int sz,int leng); //构造函数
int length();
//表长度
void Get();
//输入线性表中的元素
void GetOut();
6.2 表结构
6.2.1 线性表的基本概念
1.线性表的定义 线性表(linear list):具有n(n≥0)个数据结点(元素)的序列
(a1, a2, … ai-1,ai, ai+1 ,…, an)
线性起点 首结点
数据元素
ai的直接前趋
ai的直接后继
线性终点 尾结点
下标,是元素的序号,
表示元素在表中的位置
6.3 树结构
6.3.1 树的基本概念
1.树的定义
子树 子树
B
C
D
习惯上,根在上,叶在下
根 A
G
H
L
E
I
M FJ K
子树 B
CD
边:表示父子关系
A
G
H
EI
L
FJK M
6.3 树结构
6.3.1 树的基本概念
2.树的有关术语 (1)儿子、父亲、兄弟 (2)叶子 (3)结点的度、高度、层数 (4)树的元数 (5)位置树、正则树、森林
n=0时称为空表
n为元素总个数, 即表长
6.2 表结构
6.2.1 线性表的基本概念
2.线性表的特点 首结点无前驱,除首结点外,其它每个元素有且仅有一个直接前驱;尾 结点无后继,除尾结点外,其它每个元素有且仅有一个直接后继。 换言之,首结点没有直接前驱,只有一个直接后继;尾结点没有直接后 继,只有一个直接前驱;中间结点有且仅有一个直接前驱和一个直接后继 。
3.逻辑结构和物理结构
(2)物理结构——链式存储
h 1345
所有元素存放在可以不连续的存贮单元中,但元素之间 的关系可以通过地址确定,逻辑上相邻的元素存放到计 算机内存后不一定是相邻的。
元素1 1400
元素2 1536 元素3 1346 元素4 ∧
每个节点都由两部分组成:数据域和指针域。 数据域存放元素本身的数据,指针域存放指针。 数据元素之间逻辑上的联系由指针来体现。
//头结点
int len;
//长度
public:
LinkList();
//构造
~LinkList();
//析构
void create();
//头插法建表
void insert(int i,ElemType x); //插入
ElemType delet(ElemType x); //删除元素x
void display();
6.1 数据结构基本概念
3.逻辑结构和物理结构
(2)物理结构——顺序存储
存储地址 Lo
Lo+m Lo+(i-1)*m
Lo+(n-1)*m
存储内容
元素1 元素2 …….. 元素i …….. 元素n
所有元素存放在一片连续的 存贮单元中,逻辑上相邻的 元素存放到计算机内存仍然 相邻。
6.1 数据结构基本概念

(a)
(b)
(c)
(d)
(e)
6.3 树结构
6.3.1 树的基本概念
2.满二叉树和完全二叉树 (1)满二叉树(full binary tree)也称丰满二叉树
高为k的二叉树,结点数达到最大值2k-1的二叉树 (2)完全二叉树(complete binary tree),也称左满二叉树,或顺 序二叉树,是由满二叉树的编号从1到n的前n个结点(这里n≤2k-1)构成 的二叉树
满二叉树
完全二叉树
完全二叉树是满二叉树的一部分,满二叉树是完全二叉树的特例
6.3 树结构
6.3.1 树的基本概念
3.二叉树的遍历
先序遍历(preorder traversal): DLR遍历
中序遍历(inorder traversal): LDR遍历
后序遍历(postorder traversal): LRD遍历
//输出链表
int getLen();
//获取链表的长度
};
6.2.3 链式表
3.链式表种类 (1)单向链表
(2)双向链表
(3)循环链表
6.2 表结构
6.2.4 栈和队列
6.2 表结构
1.栈和队列的基本概念 (1)栈 只允许在同一个端点处进行插入 删除的表结构称为栈(stack)
先放的在下边 后放的在上边 后进先出表
第6章 数据结构
【学习目标】
1. 了解数据结构的基本概念 2. 了解查找和排序算法的基本概念 3. 熟悉基本数据结构的各种操作 4. 掌握基本数据结构的存储结构及特点
第6章 数据结构
【学习内容】
6.1 数据结构基本概念 6.2 表结构 6.3 树结构 6.4 图结构 6.5 查找与排序
6.1 数据结构基本概念
//删除第i个位置处的表项
private:
int *data;
//表的存放数组
int maxSize;
//表的最大可容纳项数
int len;
//表实际长度
};
6.2.2 顺序表
6.2 表结构
3.顺序表的查找 (1)顺序查找 属于“穷尽式”搜索法,是效率最低的查找方法,既适用于无序表,也 适用于有序表。 (2)二分查找 主要用于不经常变动而查找频繁的有序列表。
6.2 表结构
6.2.3 链式表
2.链式表类
typedef int ElemType;
struct NodeType{
//结点类型定义
ElemType data; //值域
NodeType *next; //链域,指向下一个结点
};
class LinkList{
private:
NodeType *Head;
1.数据、数据元素和数据项
(1)数据 在计算机领域中,数据是信息的载体,是对客观事物的符号表示,
能够直接被计算机识别、存储和加工,是计算机算法和程序的处理对象 (输入数据)和计算结果(输出数据)。
数据(data)总是以某种编码形式出现,可分为: ➢数值型数据(整数、实数等) ➢文字型数据(字符、字符串、程序代码) ➢矩阵、记录 ➢声音、图像
相关文档
最新文档