合工大数据结构 01-概述
数据结构与算法-合肥工大(4)
p↑.next:=s; ]
End;
华电计算机系
void Insert (Pointer &head, int i, ElemType x )在单链表的第i 个结点之前插入值等于x的结点。(C语言实现)
x=‘F’ i=3
p
Head
A
B
C
② F
①
S
void Insert (Pointer &head, int i, ElemType x )
华电计算机系
4)Locate_Link (Head,x):在单链表中查找值等于x的结点,返 回指向该结点的指针。(Pascal实现)
x=‘C’ Head
A
B
C
D^
p
Function Locate_Link(Head;x:ElemType):Link_list; Begin
p:=Head; while (p↑.Next< >Nil) and (p↑.data< > x) Do p:=p↑.Next; if p↑.data=x then Return(p) else Return(Nil); End;
{ head = new Node; if (!head) exit(1); // 存储空间分配失败 head->next = NULL;华电计算机系
}
2)Length_Link (Head):返回单链表中所含表结点的个数。Pascal实现
Function Length_Link(Head:Link_list):Integer; Begin
p↑.next:=Nil; End;
Procedure Create_Link_3(Var Head:Link_list); Begin
数据结构--第二章考试题库(含答案)
第2章线性表一选择题1.下述哪一条是顺序存储结构的优点?()【北方交通大学 2001 一、4(2分)】A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学 2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
【哈尔滨工业大学 2001二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
【南开大学 2000 一、3】A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学 2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
【北京理工大学 2000一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。
数据结构-合肥工业大学 9
North China Electric Power University
排序算法如下: 排序算法如下:
void insort(List r, int n) {//r为给定的表,其记录为 ,i=0,1,…,n,x为暂存单元。 为给定的表, 为暂存单元。 为给定的表 其记录为r[i], , , , , 为暂存单元 for (i=2; i<=n; i++) { r[0]=r[i]; //r[0]作为标志位 作为标志位 j=i-1; while (r[0].key<r[j].key) { r[j+1]=r[j]; j--; } //j从i-1至0,r[j].key与r[i].key进行比较 从 至 , 与 进行比较 r[j+1]=r[0]; } }//insort
northchinaelectricpoweruniversity内排插入类排序直接插入排序折半插入排序希尔排序直接插入排序折半插入排序希尔排序交换类排序冒泡排序快速排序冒泡排序快速排序选择排序排序选择类排序选择排序堆排序归并类排序归并排序其他排序计数排序基数排序计数排序基数排序northchinaelectricpoweruniversity92直接插入排序假设在排序过程中记录序列r1
North China Electric Power University
排序的时间分析: 排序的时间分析: 实现排序的基本操作有两个: 实现排序的基本操作有两个: 比较”序列中两个关键字的大小; (1)“比较”序列中两个关键字的大小; 移动”记录。 (2)“移动”记录。 对于直接插入排序: 对于直接插入排序: 最好的情况(关键字在记录序列中顺序有序): 最好的情况(关键字在记录序列中顺序有序): “比较”的次数: 比较” “移动”的次数: 移动” 比较 的次数: 移动 的次数:
数据结构与算法-合肥工大(8)
A[i, j]=
1 当顶点vi到顶点vj有边时
0 当顶点vi到顶点vj无边时 对于带权的图, 有
A[i, j]=
wij 当顶点vi到顶点vj有边,且边的权为wij
当顶o点ovi到顶点vj无边时
华电计算机系
North China Electric Power University
v1 v2
v4
Vertex1[1:4]
North China Electric Power University
第七章 图
华电计算机系
North China Electric Power University
★ 基本术语 ★ 图的存储结构 ★ 图的遍历 ★ 最小生成树和最短路径问题 ★ AOV网与拓扑排序 ★ AOE网与关键路径
华电计算机系
以顶点vi 为终止点的边的数目,记为ID(vi).
TD(vi) = OD(vi) + ID(vi)
v1
v1
v2
v3
v2
v3
v4
v4
华电计算机系
North China Electric Power University
结论1 对于具有n个顶点,e条边的图,有
n
2e = TD(vi) i=1
结论2 具有n个顶点的无向图最多有n(n-1)/2 条边.
<v2,v3>, <v4,v3> }
华电计算机系
North China Electric Power University
二.图的分类
无向图: 有向图: 网(络):
对于(vi,vj)E,必有(vj,vi)E,并且偶对中顶 点的前后顺序无关。 若<vi,vj>E是顶点的有序偶对。 与边有关的数据称为权,边上带权的图称为网络。
数据结构说课ppt课件
基本概念与术语
据结构。
数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。
依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种:
1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。
单链表
链表操作算法:初始化、插入、输出、删除、遍历
8. 在一个单链表中删除q所指结点时,应执行如下操作:
q=p->next;
p->next=( p->next->next );
free(q);//这种题目靠一根指针是没有办法完成的,必须要借助第二根指针。
9. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行:
(2) 若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元
问答题
素,这时,应采用哪种存储表示?为什么?
应采用顺序存储表示。因为顺序存储表示的存取速度快,但修改效率低。若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时采用顺序存储表示较好。
03
栈和队列
数据结构说课ppt课件
演讲人
数据结构概述
01
线性表
02
栈和队列
03
目录
01
数据结构概述
基本概念与术语
2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。
(补充:一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。)
在右侧编辑区输入内容
顺序表的存储效率高,存取速度快。此,不易扩充。同时,由于在插入或删除时,为保持原有次序,平均需要移动一半(或近一半)元素,修改效率不高。
《数据结构》第一章重点知识梳理
第一章 绪论
求绝对值 abs(表达式) 求不足整数值 floor(表达式) 求进位整数值 ceil(表达式) 判定文件结束 eof(文件变量) (10)逻辑运算 与运算&&:对于A&&B,当A的值为0时,不在对B求值。 或运算||:对于A||B,当A的值为非0时,不在对B求值。 四、算法和算法分析 1.算法 (1)算法的定义
由于算法的时间复杂度考虑的只是对于问题规模n的增长率,因此在难以精确计算基本操作 执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶即可。 4.算法的存储空间需求
类似于算法的时间复杂度,以空间复杂度(spacecomplexity)作为算法所需存储空间的量 度,记作S(n)=O(f(n))其中n为问题的规模。
18
的表示。
①元素的表示。计算机数据元素用一个由若干位组合 起来形成的一个位串表示。
图1-1四类基本结构的关系图。
5
第一章 绪论
②关系的表示。 计算机中数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象。 并由这两种不同的表示方法得到两种不同的存储结构:顺序存储结构和链式存储结构。 a.顺序映象的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。 b.非顺序映象的特点是借助指示元素存储地址的指针(pointer)表示数据元素之间的逻辑
数据元素(dataelement)是数据的基本单位,在计算机程序中通常作为一个整体进行考 虑和处理。
3
第一章 绪论
3.数据对象 数据对象(dataobject)是性质相同的数据元素的集合,是数据的一个子集。
4.数据结构 数据结构(datastructure)是相互之间存在一种或多种特定关系的数据元素的集合。 (1)数据结构的基本结构 根据数据元素之间关系的不同特性,通常有下列四类基本结构: ①集合。数据元素之间除了“同属于一个集合”的关系外,别无其它关系。 ②线性结构。数据元素之间存在一个对一个的关系。 ③树形结构。数据元素之间存在一个对多个的关系。 ④图状结构或网状结构。数据元素之间存在多个对多个的关系。
数据结构 第一章概论
注意:常用DataType表示抽象元素类型。
H
13
1.3 算法和算法分析
数据的运算是通过算法描述的。
1.算法----求解一个特定任务的指令的有限序列。
例.求a[0..n-1]中n个数的平均值(假定n>0)。
float average(float a[ ],int n)
{ int i;float s=0.0; //累加器赋初值
8. }
其中:f(m,n)=1+m+2*m*n+m=2mn+2m+1
当m=n时,f(n)=2n2+2n+1
T(n)=O(f(n))=O(2n2+2n+1)=O(n2) 平方阶。
对嵌套层次的循环结构,时间的复杂度T(n)由最内 层循环体语句的频度f(n)决定。
H
22
例4 分析下面的算法
1. void sum(int n)
其中:D1,D3是有穷集,D2是无穷集。
5.抽象数据对象
ElemSet={某种同类型的数据元素}
H
8
6.数据结构(data structure)----
数据之间的相互关系,即数据的组织形式。 内容包括:数据逻辑结构、数据存储结构和数据运算。
数据逻辑结构:数据元素之间的逻辑关系。 数据存储结构:数据元素及其关系在存储器中的存储表示。 数据运算:定义在数据逻辑结构上的操作。如:查询,插入,
(4)
for (k=0;k<n;k++)
n2(n+1)
(5)
c[i][j]=c[i][j]+a[i][k]*b[k][j]; n3
}
}
算法所消耗的时间就是所有语句频度之和T(n):
数据结构 课件 第一章绪论
1.1 数据结构(续) 数据结构(
很多问题求解最后都转化为求解数学方程或数学方程组。 很多问题求解最后都转化为求解数学方程或数学方程组。 在房屋设计或桥梁设计中的结构应力分析 结构应力分析计算可化解为 在房屋设计或桥梁设计中的结构应力分析计算可化解为 线性代数方程组求解的问题 的问题, 线性代数方程组求解的问题, 天天看到的天气预报 它的数学模型是一个环流模式方 天气预报, 天天看到的天气预报,它的数学模型是一个环流模式方 程。 预报人口增长情况的数学模型为微分方程。 情况的数学模型为微分方程 预报人口增长情况的数学模型为微分方程。 当计算机进入非数值计算领域 非数值计算领域, 当计算机进入非数值计算领域,特别是用在管理上的时 候,计算机的操作对象之间的关系就无法用数学方程加以 描述了。 描述了。
按书名
高等数学 理论力学 线性代数 ……
S01 L01 S01 S02 ……
索引表
分类号: 001,003…… 001,003…… 出版单位: 樊映川 002,…….. 002,…….. 出版时间: 华罗庚 004, 004,…… 栾汝书 价格:
…….. ……..
……. …….
按作者名
001,… 001,… 002,…. 002,… 004,… 004,…. ……. …….
2010-112010-11-18
7
例2 - 1
人机对奕问题
树形的数据结 构
……..
……..
2010-112010-11-18
…...
…...
…...
…...
8
例2 - 2
学校问题
树形的数据结 构
刘志刚
部门
…….. ..
数据结构ppt课件完整版
针对有序数据集合,每次通过中间元素将 待查找区间缩小为之前的一半,直到找到 元素或区间为空。
哈希查找
树形查找
通过哈希函数将数据映射到哈希表中,实 现快速查找。
如二叉搜索树、平衡树等,通过树形结构实 现高效查找。
排序算法分类及实现原理
插入排序
将待排序元素逐个插入到已排序序列中,直到所有元素均插入完毕。
由n(n>=0)个具有相同类型 的数据元素(结点)a1,a2,
...,an组成的有序序列。
同一性
每个元素必须是同一类型的数 据。
有序性
元素之间具有一对一的前驱和 后继关系,即除首尾元素外, 每个元素都有一个前驱和一个 后继。
可变性
线性表的长度可变,即可以插 入或删除元素。
顺序存储结构与链式存储结构比较
定义
用一段连续的存储单元依次存储线性 表的数据元素。
优点
可以随机存取表中任一元素,且存取 时间复杂度为O(1)。
顺序存储结构与链式存储结构比较
• 缺点:插入和删除操作需要移动大量元素,时间 复杂度高;需要预先分配存储空间,容易造成空 间浪费。
顺序存储结构与链式存储结构比较
定义
用一组任意的存储单元存储线性 表的数据元素(这组存储单元可 以是连续的,也可以是不连续的
查找操作
查找指定元素的位置。
遍历操作
访问线性表中的每个元素。
销毁操作
释放线性表占用的存储空间。
03
栈和队列
栈定义及特点
栈(Stack)是一种特殊的线性数据结构,其数据的存 取遵循后进先出(LIFO, Last In First Out)的原则。 栈的特点
具有记忆功能,能保存数据的状态。
栈的基本操作包括入栈(push)、出栈(pop)、查 看栈顶元素(top)等。 只能在栈顶进行数据的插入和删除操作。
[计算机]合工大计算机学院 程序设计 01第一章 程序设计与C 语言初步
1.1.2 实体
例1.1.2: 在银行账户中存款。 输入: 存款金额m和当前余额b。 输出: 新余额b’。 步骤: 令b’=b+m并终止。
1.1.2 实体
例1.1.3: 从银行账户中取款。 输入:取款金额m、当前余额b和透支限额v。 输出:已取金额m’ 和新余额b’。 步骤 1 :如果 m>b+v ,则令 m’=0 , b’=b 并转 向步骤2;否则令m’=m,b’=b-m并终止。 步骤2:提示超额透支并终止。
例2:一个带有类完整的C++语言程序。
//银行帐户存取款程序 #include <iostream.h> //利用函数库iostream 提供的操作在屏幕上输出数据 class ACCOUNT{ float balance; //本帐户当前的余额 public: //开设帐户,同时存入金额amount. ACCOUNT(float amount){ balance=amount; } //往帐户中存款,存款金额为amount. void deposit(float amount){ balance=balance+amount; }
//查询帐户中当前的余额。 float get_balance(){ return balance; //返回当前的余额 } };
//主函数 main() { //开设帐户 ACCOUNT acc1(500); //开设第一个帐户acc1,同时存入500元 ACCOUNT acc2(1500);//开设第二个帐户acc2,同时存入1500元 //存款与取款 acc1.deposit(255.5); //往帐户acc1中存入255.5元 acc2.deposit(500); //往帐户acc2中存入500元 acc2.withdraw(700); //往帐户acc2中取出700元 acc1.withdraw(700); //往帐户acc1中取出700元 acc2.withdraw(350); //往帐户acc2中取出350元 //查询余额并在屏幕上显示 cout<<"帐号1的余额还有"<<acc1.get_balance()<<"元 \n"; cout<<"帐号2的余额还有"<<acc2.get_balance()<<"元 \n"; return 1; }
合肥工业大学数据结构试验一实验报告
计算机与信息学院数据结构实验报告专业班级学生姓名及学号课程教学班号任课教师实验指导教师实验地点2015 ~2016 学年第 2 学期说明实验报告是关于实验教学内容、过程及效果的记录和总结,因此,应注意以下事项和要求:1.每个实验单元在4页的篇幅内完成一份报告。
“实验单元”指按照实验指导书规定的实验内容。
若篇幅不够,可另附纸。
2、各实验的预习部分的内容是进入实验室做实验的必要条件,请按要求做好预习。
3.实验报告要求:书写工整规范,语言表达清楚,数据和程序真实。
理论联系实际,认真分析实验中出现的问题与现象,总结经验。
4.参加实验的每位同学应独立完成实验报告的撰写,其中程序或相关的设计图纸也可以采用打印等方式粘贴到报告中。
严禁抄袭或拷贝,否则,一经查实,按作弊论取,并取消理论课考试资格。
5.实验报告作为评定实验成绩的依据。
实验序号及名称:实验一单链表实验实验时间∶ 2016年 5 月二、实验内容与步骤(过程及数据记录):<1>求链表中第i个结点的指针(函数),若不存在,则返回NULL。
实验测试数据基本要求:第一组数据:链表长度n≥10,i分别为5,n,0,n+1,n+2第二组数据:链表长度n=0,i分别为0,2node* list::address(int i){n ode *p = head->next;i nt n = 1;w hile (n != i&&p != NULL){p = p->next;n++;}i f (p!=NULL) return p;e lse return NULL;}第一组数据第二组数据<2>在第i个结点前插入值为x的结点。
实验测试数据基本要求:第一组数据:链表长度n≥10,x=100, i分别为5,n,n+1,0,1,n+2第二组数据:链表长度n=0,x=100,i=5errorcode list::insert(const int i, const int x){n ode *p;p = head;i nt n = 1;w hile (n != i&&p != NULL){p = p->next;n++;}i f (i<1 || i>length() + 1) return rangeerror;n ode *s = new node;s->data = x;s->next = p->next;p->next = s;c ount++;r eturn success;}<3>删除链表中第i个元素结点。
数据结构讲稿
第一章绪论计算机科学是一门研究数据表示和数据处理的科学。
数据是计算机化的信息,它是计算机可以直接处理的最基本和最重要的对象。
无论是进行科学计算或数据处理、过程控制以及对文件的存储和检索及数据库技术等计算机应用领域中,都是对数据进行加工处理的过程。
因此,要设计出一个结构好效率高的程序,必须研究数据的特性及数据间的相互关系及其对应的存储表示,并利用这些特性和关系设计出相应的算法和程序。
1.1 数据结构的概念数据结构是计算机科学与技术专业的专业基础课,是十分重要的核心课程。
所有的计算机系统软件和应用软件都要用到各种类型的数据结构。
要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。
打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库管理系统、软件工程、人工智能等都是十分有益的。
1.1.1 为什么要学习数据结构当我们使用计算机来解决一个具体问题时,一般需要经过下列几个步骤:首先要从该具体问题抽象出一个适当的数学模型,然后设计或选择一个解此数学模型的算法,最后编出程序进行调试、测试,直至得到最终的解答。
随着计算机应用领域的扩大和软、硬件的发展,非数值计算问题越来越显得重要。
据统计,当今处理非数值计算性问题占用了90%以上的机器时间。
这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。
因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题。
下面所列举的就是属于这一类的具体问题。
[例1]学生信息检索系统。
当我们需要查找某个学生的有关情况的时候;或者想查询某个专业或年级的学生的有关情况的时候,只要我们建立了相关的数据结构,按照某种算法编写了相关程序,就可以实现计算机自动检索。
由此,可以在学生信息检索系统中建立一张按学号顺序排列的学生信息表和分别按姓名、专业、年级顺序排列的索引表,如图1.1所示。
理工类专业课复习资料-数据结构知识点全面总结—精华版
第1章绪论内容提要:◆数据结构研究的内容。
针对非数值计算的程序设计问题,研究计算机的操作对象以及它们之间的关系和操作。
数据结构涵盖的内容:◆基本概念:数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型。
数据——所有能被计算机识别、存储和处理的符号的集合。
数据元素——是数据的基本单位,具有完整确定的实际意义。
数据对象——具有相同性质的数据元素的集合,是数据的一个子集。
数据结构——是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_Structure=(D, R)数据类型——是一个值的集合和定义在该值上的一组操作的总称。
抽象数据类型——由用户定义的一个数学模型与定义在该模型上的一组操作,它由基本的数据类型构成。
◆算法的定义及五个特征。
算法——是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
算法的基本特性:输入、输出、有穷性、确定性、可行性◆算法设计要求。
①正确性、②可读性、③健壮性、④效率与低存储量需求◆算法分析。
时间复杂度、空间复杂度、稳定性学习重点:◆数据结构的“三要素”:逻辑结构、物理(存储)结构及在这种结构上所定义的操作(运算)。
◆用计算语句频度来估算算法的时间复杂度。
第二章线性表内容提要:◆线性表的逻辑结构定义,对线性表定义的操作。
线性表的定义:用数据元素的有限序列表示◆线性表的存储结构:顺序存储结构和链式存储结构。
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
链式存储结构: 其结点在存储器中的位置是随意的,即逻辑上相邻的数据元素在物理上不一定相邻。
通过指针来实现!◆线性表的操作在两种存储结构中的实现。
数据结构的基本运算:修改、插入、删除、查找、排序1)修改——通过数组的下标便可访问某个特定元素并修改之。
核心语句:V[i]=x;顺序表修改操作的时间效率是O(1)2) 插入——在线性表的第i个位置前插入一个元素实现步骤:①将第n至第i 位的元素向后移动一个位置;②将要插入的元素写到第i个位置;③表长加1。
合工大 计算机组成原理 计算机组成原理提纲
计算机与信息学院
21
如何表示+∞/-∞
In FP, 除数为0的结果是 +/- ∞, 不是溢出异常. ∞ :无穷(infinity)
为什么要这样处理? • 可以利用+∞/-∞作比较。 例如:X/0>Y可作为有效比较
解:P1和P2指令执行条数分别为12和10,所以P2指令条数少。 P1时钟周期数为8×1+2 ×2+2 ×4=20 P2时钟周期数为2×1+5 ×2+3 ×4=24 两个程序在同一台机器上运行,所以时钟周期一样,故时钟数少的代码序列
所用的时间短、执行速度快。P1比P2快。由上可知,指令条数少的代码序列 执行时间并不一定短。
CPI=程序总时钟周期数÷程序所含指令条数 P1的CPI=20/12=1.67 P2的CPI为24/10=2.4
计算机与信息学院
9
第二章 数据的表示和运算
(一)数制与编码 1. 进位计算制及其相互转换 2. 真值和机器数 3. BCD码 4. 字符与字符串 5. 校验码
(二)定点数的表示和运算 1. 定点数的表示
DP: (-1)S x (1 + Significand) x 2(Exponent-1023)
计算机与信息学院
20
0的表示
How to represent 0? exponent: all zeros significand: all zeros What about sign? Both cases valid.
数 值型 数据
数据结构-合肥工业大学8
North China Electric Power University
平均查找长度:为确定某元素在表中某位置所进行的比 较次数的期望值。
在长度为n的表中找某一元素,查找成功的平均查 找长度:
ASL=∑PiCi
Pi :为查找表中第i个元素的概率 Ci :为查到表中第i个元素时已经进行的比较次数
North China Electric Power University
low mid high 因为r[mid].key=k,查找成功,所查元素在表中的序号为mid 的值
North China Electric Power University
2.查找关键字k=85 的情况 (1) low=1; high=11; mid=(1+11) div 2=6
05 13 19 21 37 56 64 75 80 88 92
2)块中的记录是任意排列的,则在块中只能用顺序查找。
分块查找的平均查找长度应该是前两者之和:
即: ASLbs=Lb+Lw Lb:为查找所在块的平均查找长度。
Lw:为块中查找元素的平均查找长度。
已知表的长度为n,分成b小块,每块有s个元素,那么 b=n/s.若表中各元素的查找概率相等,那么每块的查 找概率为1/b,块中每个元素的查找概率为1/s.
North China Electric Power University
2)折半查找(有序表上进行查找):
基本思想:设三个指针low,high和mid分别指示待查有 序表的表头,表尾和中间元素,在开始查找时,三个指 针的初值分别为: low=1;high=n;mid=(low+high)div 2。折半查找是 从表的中间元素开始,用待查元素的关键字k和 r[mid].key比较,此时有三种情况 (假设该查找表按关 键1)字若的r[非m递id减].k次ey序=排k,列则) 查:找成功;
数据结构实验报告(合工大)
数据结构实验报告实验一:栈和队列实验目的:掌握栈和队列特点、逻辑结构和存储结构熟悉对栈和队列的一些基本操作和具体的函数定义。
利用栈和队列的基本操作完成一定功能的程序。
实验任务1.给出顺序栈的类定义和函数实现,利用栈的基本操作完成十进制数N与其它d进制数的转换。
(如N=1357,d=8)实验原理:将十进制数N转换为八进制时,采用的是“除取余数法”,即每次用8除N所得的余数作为八进制数的当前个位,将相除所得的商的整数部分作为新的N值重复上述计算,直到N为0为止。
此时,将前面所得到的各余数反过来连接便得到最后的转换结果。
程序清单#include<iostream>#include<cstdlib>using namespace std;typedef int DATA_TYPE;const int MAXLEN=100;enum error_code{success,overflow,underflow};class stack{public:stack();bool empty()const;error_code get_top(DATA_TYPE &x)const;error_code push(const DATA_TYPE x);error_code pop();bool full()const;private:DATA_TYPE data[MAXLEN];int count;};stack::stack(){count=0;}bool stack::empty()const{return count==0;}error_code stack::get_top(DATA_TYPE &x)const {if(empty())return underflow;else{x=data[count-1];return success;}}error_code stack::push(const DATA_TYPE x){if(full())return overflow;else{data[count]=x;count++;}}error_code stack::pop() {if(empty())return underflow;else{count--;return success;}}bool stack::full()const {return count==MAXLEN; }void main(){stack S;int N,d;cout<<"请输入一个十进制数N和所需转换的进制d"<<endl; cin>>N>>d;if(N==0){cout<<"输出转换结果:"<<N<<endl;}while(N){(N%d);N=N/d;}cout<<"输出转换结果:"<<endl;while(!()){(N);cout<<N;();}cout<<endl;}while(!()){(x);cout<<x;();}}测试数据:N=1348 d=8运行结果:2.给出顺序队列的类定义和函数实现,并利用队列计算并打印杨辉三角的前n行的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
本课程的主要内容
数据结构的基本概念;
线性表、栈和队列、串和数组;
树形结构;
图结构;
查找; 排序; 其他
合肥工业大学 计算机与信息学院
4
一个问题引发的
将10个数据排序
……
冒泡排序?选择排序?„
将100、1000、…、1000000个数据排序
时间如何? 空间如何? 课后作业: 完成5000数据排序,并显示运行时间。
合肥工业大学 计算机与信息学院
10
1.2 术语
数据结构示例:
编号 姓名 基本工资 奖金 … …
序号 学号 姓名 成绩 备注
(a) 工资表示例
(b) 成绩表示例
合肥工业大学 计算机与信息学院
11
1.2 术语
A A1 A2 A3 A3 A11 A12 A21 A31 A32 A4 A121 A311 A7 A1 A2 A8
一个农夫携带一只狼,一只羊和一棵白菜,要借助一条小船 过河。小船上除了农夫只能再带狼、羊、白菜中的一样。而 农夫不在时,狼会吃羊,羊会吃白菜。农夫如何过河呢?
先带羊过去,回来带白菜,再把羊带回来,白菜放在对面, 然后把狼带过去,羊放这边,最后回来带羊。
合肥工业大学 计算机与信息学院
7
第一章 概 述
合肥工业大学 计算机与信息学院
23
1.4 算法分析
时间性能(时间复杂度): 以算法运行时间开销来度量
改进
简化
与具体机器相关
计算麻烦
以算法中语句的执行次数来衡量 以算法中语句的执行次数的数量级来替代
数量级:如果变量n的函数f(n)和g(n)满足:lim f(n)/g(n)=常数 k (k≠∞,0),则称
f(n)和g(n) 是同一数量级的,并用f(n)=O(g(n))的形式来表示。
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)||< O(2n)< O(n!) 难以实现
合肥工业大学 计算机与信息学院
24
1.4 算法分析
例子:求解以下程序段的时间复杂度: for(i=1; i<=n; i++)x=x+1;
//输出满足条件的各解
合肥工业大学 计算机与信息学院
19
1.3 算法及其描述
3.幻方问题(纵横图)
将1~n2放在n*n(n为奇数) 的方阵中,使得任意一行任意一 列以及两条对角线上的所有元素之和均相等。如 n=5时的方 阵如下图所示。
15 8 1 7 24 17 5 6 23 4
16 14
22 20 13
第一章 概
1.1 1.2 1.3 1.4
述
研究内容
术语 算法及其描述 算法分析
合肥工业大学 计算机与信息学院
8
1.1 研究内容
软件设计中常用的基本技术
实际问题
抽象
数学模型
构造求解算法
数据结构组织
求解方法
程序设计
测试
数据结构
合肥工业大学 计算机与信息学院
9
1.2 术语
数据(data)—— 能够输入到计算机中并能被计算机识别、存储
合肥工业大学 计算机与信息学院
21
1.3 算法及其描述
n=5时的求解过程如下:
15 16 8 14 20 21 2 1 7 24 17 23 4 10
5 6
22 3
13 19 25
12 18
9
11
22
合肥工业大学 计算机与信息学院
1.4 算法分析
算法的衡量指标:
在正确性的前提下
时间性能——运行算法的时间开销 空间性能——运行算法的辅助空间规模 其它性能——如可读性/可移植性
数 据 结 构
(第一章 概述)
Data Structures
张晶 计算机与信息学院 2015/12/7
合肥工业大学 计算机与信息学院
1
课程背景
计算机相关专业的一门重要的专业基础课
主要研究计算机加工对象的逻辑结构、在计算机中的
表示形式以及实现各种基本操作的算法
是学习计算机其他相关课程的必备条件,是提高编程
合肥工业大学 计算机与信息学院
17
1.3 算法及其描述
例2. “韩信点兵”问题的求解方法
有一队士兵,确切人数不知,但若每3人一组,则余2人; 每5人一组,余3人;每7人一组,余5人;每11人一组, 余4人。 请解答下列问题: ⑴至少有多少人? ⑵若已知人数在5000~10000之间,问有多少个答案? 解:初学者容易想到用逐个试探的方法来求解,这样显然很耗 时间,特别是在所求解的值非常大时。 求解方法是:逐个满足条件,在寻找满足下一个条件的解时保 证前面条件继续成立。 如何做到这一点? 可以这样实现:探索满足下一个条件的n的值时,以累加 前面各数的最小公倍数来试探。由此得到求解的程序段。
(1500,550)=(550,400) =(400,150)=(150,100) =(100,50)=(50,0)=50 最终求得1500和550的最大公因子为50。
合肥工业大学 计算机与信息学院
16
1.3 算法及其描述
由此,可得到求任意两个整数M和N最大公因子的算法的C语言函数如下:
int hcf(int m, int n) { while (n!=0) { r=m % n; m=n; n=r; } return m; } 其对应的递归函数如下: int hcf(int m, int n) { if (n==0) return m; else return hcf(n, m % n); }
逻辑结构 抽象 数据 类型 (ADT) 运算定义
存储结构
运算实现(算法)
测试与分析
合肥工业大学 计算机与信息学院
13
1.3 算法及其描述
算法 —— 特定问题的求解方法, 指令的有限序列, 满足: (1) 输入 0~n个 (2) 输出 1~n 个 与输入有特定联系 (3) 确定性(无二义性) 相同的输入只能有相同的输出 (4) 有限性 执行次数有限 (5) 可行性 算法可用计算机在有限时间内实现
能力的必要条件 需程序设计类课程的支撑(C/C++/Java)
合肥工业大学 计算机与信息学院
2
全课程的章节安排
第一章 概述 第二章 顺序栈 第三章 顺序队列 第四章 链栈和链队列 第五章 线性表 第六章 递归技术 第七章 数组和广义表 第八章 树和二叉树 第九章 图结构 第十章 查找 第十一章 排序
算法设计是计算机专业的核心能力,是区别于其他专业的最核心能力之一。 合肥工业大学 计算机与信息学院
14
1.3 算法及其描述
算法描述语言
易懂,灵活
自然语言
不准确 准确,严格
计算机语言 死板 伪语言(类语言):类pascal、类C、类C++
算法举例: 1.求最大公因子(辗转相除法) 2.韩信点兵问题 3.幻方问题(纵横图)
பைடு நூலகம்
25
练习:
1. 求下列语句段的时间复杂度:
(1) for (i=1; i<n; i++) for (j=1; j<= i; j++) x++; (2) i = 1; while (i<n) i = i*2; (3) for (i=1; i<=n; i++)
for (j=1; j<=n; j++) for (k=1; k<=n; k++) x++; (4)for (i=1; i<n; i++) for (j=1; j<n; j++) x++; for (k=1; k<n;k++) x++;
合肥工业大学 计算机与信息学院
18
1.3 算法及其描述
问题(1)的C语言程序段如下: { n=2; // 满足 3人一组余2 while (n % 5!=3) n=n+3; // 在保证 3人一组余2的前提下寻找满足5人一组余3的n值 while (n % 7!=5) n=n+15; //在满足前两个条件的前提下寻找满足7人一组余5的n值 while (n % 11!=4) n=n+105; //在满足前三个条件的前提下寻找满足11人一组余4的n值 } 其中每次所加上的是前面数的最小公倍数---3,15,105 问题(1)的C语言程序段如下: { while (n<5000 ) n=n+1155; while (n<=10000) {cout<<n; n=n+1155;} }
合肥工业大学 计算机与信息学院
26
练习:
2. 编写算法以计算在给定各系数和变量x的值时的多项 式fn(x)的值,要求时间尽可能少。 (提示:可将各系数存储在数组A中; 另外,乘法运算的时间是加法运算时间的数倍) fn(x)=a0+a1x+a2x2+a3x3+…..+anxn 3. 设计算法求集合{1,2,...,n}的幂集。
语句执行次数
i=1
1次
0
i<=n 非0 x=x+1
n+1次
n次
i++
n次
共:3n+2次
数量级为:lim f(n)/g(n)= lim (3n+2)/n = 3,则时间复杂度为为O (n)