西安交通大学计教中心 ctec.xjtu.edu.cn

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
第1章 绪论 数据结构(C++描述).
第二章 线性表 £2.4 线性表的应用 £2.1 线性表的类型定义 £2.2 线性表的顺序存储结构 £2.3 线性表的链式存储结构
数 据 结 构 主讲人:文 军.
数据结构 主讲:庄越.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
计算机软件技术基础 数据结构与算法(2).
第三章 栈和队列 Stack and Queue
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
数据结构 第二章 线性表.
制作:崔广才
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
本 章 说 明 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式存储结构 2.4 循环链表和双向链
走进编程 程序的顺序结构(二).
西安交通大学计教中心 ctec.xjtu.edu.cn
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第2讲 绪论(二).
第2章 线性表 丽水学院工学院.
第2章 线性表 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一章 绪论.
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
线性表练习.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
动态规划(Dynamic Programming)
顺序表的插入.
王玲 第 2 章 线性表 王玲 2019/2/25.
从zval看PHP变量
严蔚敏、吴伟民编著 清华大学出版社 学习网站:中国网页设计
计算.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
VB与Access数据库的连接.
单链表的基本概念.
顺序查找.
线性结构 线性结构的特点: 线性结构的种类 在数据元素的非空有限集中, (1)存在唯一的一个被称做“第一个”的数据元素;
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
第 四 讲 线性表(二).
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第三章 数据组织与处理.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
1.2 子集、补集、全集习题课.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第一章 绪论 1.1 引言 1.2 逻辑结构和存储结构 1.3 算法.
2.2矩阵的代数运算.
上杭二中 曾庆华 上杭二中 曾庆华 上杭二中 曾庆华.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
算法3.3 void InitList_sq(SqList &L,int msize=LIST_INIT_SIZE)
插入排序的正确性证明 以及各种改进方法.
第二部分 数据结构—— 用面向对象方法与C++描述.
第二章 线性表 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
9.3多项式乘多项式.
Presentation transcript:

西安交通大学计教中心 ctec.xjtu.edu.cn 数据结构概念及顺序表 西安交通大学计教中心 ctec.xjtu.edu.cn

2.1 数据结构基本概念 1.数据(data) 2.数据元素(data element) 2.1 数据结构基本概念 1.数据(data) 数据是指能够输入到计算机中,并被计算机识别和处理的符号的集合。 2.数据元素(data element) 数据元素是组成数据的基本单位。数据元素是一个数据整体中相对独立的单位。但它还可以分割成若干个具有不同属性的项(字段),故不是组成数据的最小单位

数据结构(data structure) 数据的逻辑结构独立于计算机,是数据本身所固有的 是指相互之间存在一种或多种特定关系的数据元素所组成的集合。数据结构包含三个方面的内容,即数据的逻辑结构,数据的存贮结构和对数据所施加的运算。 这三个方面的关系为: 数据的逻辑结构独立于计算机,是数据本身所固有的 存贮结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。 运算是指所施加的一组操作总称。运算的定义直接依赖于逻辑结构,但运算的实现必依赖于存贮结构。

数据结构基本类型 线性结构 —— 通迅录、成绩单、花名册 树形结构 —— 电子字典、家谱、目录 图状结构 —— 交通线路、通信网络

数据结构中常用的存贮结构 (1) 顺序存贮 (2) 链式存贮 (3) 索引存贮(略) (4) 散列存贮(略) 所有元素存放在一片连续的存贮单元中,逻辑上相邻的元素存放到计算机内存仍然相邻。 (2) 链式存贮 所有元素存放在可以不连续的存贮单元中,元素之间的关系通过地址确定,逻辑上相邻的元素存放到计算机内存后不一定是相邻的。 (3) 索引存贮(略) (4) 散列存贮(略)

算法(algorithm) 通俗地讲,算法就是一种解题的方法。更严格地说,算法是由若干条指令组成的有穷序列,它必须满足下述条件(也称为算法的五大特性): (1)输入:具有0个或多个输入的外界量(算法开始前的初始量) (2)输出:至少产生一个输出,它们是算法执行完后的结果。 (3)有穷性:每条指令的执行次数必须是有限的。 (4)确定性:每条指令的含义都必须明确,无二义性。 (5)可行性:每条指令的执行时间都是有限的。

算法分析 1. 时间复杂度 一个算法花费的时间与算法中语句的执行次数成正比,哪个算法中语句执行次数多,它花费时间就多。 数据结构中数据元素个数n称为问题的规模,当n不断变化时,语句的执行次数也会变化。一个算法中的时间复杂度一般用语句执行次数的数量级来衡量。 例如: for(i=1; i<=n; i++) for(j =1; j<=i; j++) d[i][j]=data[i][j]+1; O(n2)

2. 空间复杂度 与时间复杂度类似,空间复杂度是指算法在计算机内执行时所占用的内存开销规模。但我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。讨论方法与时间复杂度类似,不再赘述。

2.2 线性数据结构 线性表是由有限个同类型的数据元素组成的有序序列,一般记作(a1,a2,…,an)。除了a1和an之外,任意元素ai都有一个直接前趋ai-1和一个直接后继ai+1。 a1无前趋,an无后继。 线性表的存储结构主要有顺序存储结构和链式存储结构两种。

Loc(ai) = Loc(a1) + (i-1) * d 顺序表 采用顺序存储结构的线性表称为顺序表,它的数据元素按照逻辑顺序依次存放在一组连续的存储单元中。逻辑上相邻的数据元素,其存储位置也彼此相邻。 假定元素a1的物理地址是Loc(a1),每个元素占d个存储单元,则第i个元素的存储位置为: Loc(ai) = Loc(a1) + (i-1) * d length=n maxsize 0 1 i-2 i-1 i n-1 a2 … ai-1 ai ai+1 a1 an

顺序表类型描述 struct SeqList { ElemType *data; // 顺序表存储数组的地址 int maxsize; // 顺序表最大允许长度 int length; // 顺序表当前长度 }; SeqList list; // 定义一个线性表list (1)ElemType代表数组的类型。 (2)数组data需要在初始化函数中利用new操作动态申请,maxsize为其长度。数组的下标从0开始。 (3)length表示线性表当前长度,初始长度为0(空表),最大不超过maxsize。

顺序表的主要算法 (1)顺序表的初始化 顺序表的初始化主要是为ElemType类型的数组申请空间,下面的初始化函数为顺序表申请了长度为size的空间。 void Init( SeqList *L, int size ) { if( size > 0 ) L->maxsize = size; L->length = 0; L->data = new ElemType[size]; //申请空间 } else cout<<"线性表初始化长度错误";

(2)在表中第 i 个位置插入新元素x 算法实现的主要步骤是: ① 判断插入位置的合理性以及表是否已满。 ② 从最后一个元素开始依次向前,将每个元素向后移动一个位置,直到第i个元素为止。 ③ 向空出的第i个位置存入新元素x。 ④ 最后还要将线性表长度加一。

void Insert( SeqList *L, int i, ElemType x ) { if( i<1 || i>L->length+1 || L->length==L->maxsize ) cout<<"插入位置错误或表满"; else { for( int j=L->length-1; j>=i-1; j-- ) L->data[j+1] = L->data[j]; //元素依次后移 L->data[i-1] = x; // 向第 i 个位置存入新元素 x L->length++; // 表长度加一 }

(3)在表中删除第i个元素 算法实现的主要步骤是: ① 判断删除位置的合理性。 ② 从第i+1个元素开始,依次向后直到最后一个元素为止,将每个元素向前移动一个位置。这时第i个元素已经被覆盖删除。 ③ 最后还要将线性表长度减一。

void Delete( SeqList *L, int i ) { if(i<1 || i>L->length ) cout<<"表中没有第"<<i<<"个元素"; else { for ( int j=i; j<=L->length-1; j++ ) L->data[j-1] = L->data[j]; L->length--; }

下面是根据数据元素本身的值进行查询的算法,x为需要查找的元素,算法返回元素的实际位置。 (4)在表中查找某个元素 下面是根据数据元素本身的值进行查询的算法,x为需要查找的元素,算法返回元素的实际位置。 int Find( SeqList *L, ElemType x ) { for( int i = 0; i<L->length; i++ ) { //查找成功,返回元素位置 if( L->data[i]==x ) return i+1; } return 0; //查找失败,返回 0

顺序表应用举例 【例2-1】利用顺序表表示多项式,实现两个一元多项式L1(x)和L2(x)相加,将结果存于多项式L3(x)中。并计算当L1(x)=3.5+4x2+2.5x4,L2(x)=1.5x+2.6x2+1.6x3时,L3(x)的结果是什么。 一元多项式P(x)可以表示为((a0, 0), (a1, 1), … , (a n, n))。例如线性表((6, 1), (-5, 4), (8, 10))表示多项式: P(x) = 6x - 5x4 + 8x10。

用顺序表L1和L2存放需要相加的两个多项式L1(x)和L2(x),用顺序表L3来存放结果。多项式相加算法可按照下列步骤实现: ① 设定两个位置变量i和j指向顺序表L1和L2的第一个元素,设定位置变量k表示L3的插入位置,插入位置从1开始。本例中i、j和k初值均为1。 ② 比较i和j两个位置数据元素的指数项,如果L1中第i项指数较小,则将此项数据元素复制到L3的位置k中,并将位置变量i和k后移;如果L2中第j项指数较小,则同样是将此项复制到L3中,并将位置变量j和k后移;如果两项指数项相等,则合并同类项后再将结果复制到L3中,并将位置变量i、j和k同时后移。 ③ 当L1或L2中的一个顺序表已经处理完毕,则将另一个顺序表的剩余部分复制到L3中。

参照程序[例2-1]