数据结构 耿国华 西北大学 7-2图的存储结构
- 格式:ppt
- 大小:1.41 MB
- 文档页数:21
第一章绪论1.数据:人们利用文字符号、数字符号及其他规定的符号对现实世界的事物及其活动的描述。
凡是能被计算机输入、存储、处理和输出的一切信息都叫数据。
2.数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据元素的组成:一个数据元素通常由一个或若干数据项组成。
数据项:指具有独立含义的最小标识单位。
3.数据对象:性质相同的数据元素的集合,是数据的一个子集。
4.数据结构:研究的是数据的逻辑结构和物理结构,以及它们之间的相互关系和所定义的算法在计算机上运行的学科。
5.算法:是对待定问题求解步骤的一种描述,是指令的有限序列。
算法应满足以下性质:1)输入性:具有零个或若干个输入量;2)输出性:至少产生一个输出;3)有穷性:每条指令的执行次数是有限的;4)确定性:每条指令的含义明确,无二义性;5)可行性:每条指令都应在有限的时间内完成。
6.评价算法优劣的主要指标:1)执行算法后,计算机运行所消耗的时间,即所需的机器时间;2)执行算法时,计算机所占存储量的大小,即所需的存储空间;3)所设计的算法是否易读、易懂,是否容易转换成其他可运行的程序语言。
7.会估算某一算法的总执行时间和时间复杂度。
8.熟悉习题P32:3(5)-(9)、4(2)(3)第二章线性表1.线性表(P7):是性质相同的一组数据元素序列。
线性表的特性:1)数据元素在线性表中是连续的,表中数据元素的个数可以增加或减少,但调整后数据元素仍必须是连续的,即线性表是一种线性结构。
2)数据元素在线性表中的位置仅取决于自己在表中的序号,并由该元素数据项中的关键字(key)加以标识。
3)线性表中所有数据元素的同一数据项,其属性是相同的,数据类型也是一致的。
线性表的主要运算有:插入、删除、查找、存取、长度、排序、复制、合并。
线性表的顺序存储结构及特点(就是把表中相邻的数据元素存放在内存邻接的存储单元,这种存储方法叫做顺序分配,又称顺序映像。
课程编号:()《数据结构》课程教学大纲(Date Structure)总学时:(64)学分:(3)一、课程简介:1、课程性质:专业基础课2、开课学期:第三学期3、适用专业:电子信息工程卓越班4、课程修读条件:学生在学习本课程之前应当先学《C语言程序设计》,若具有离散数学和概率论的知识则能更好理解本课程中的某些内容。
5、课程教学目的:本课程是关于数据结构知识的一门课程,为我院电子信息工程本科专业卓越班方向专业基础课。
通过本课程的学习,使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术,培养学生的数据抽象能力,引导学生数据类型的使用,为今后学习程序设计、嵌入式系统、设备驱动开发等作一些铺垫。
二、教学基本要求或建议:全程以多媒体教学为主,理论联系实际应用,通过实验来理解理论知识。
三、内容纲目及标准:(一)理论部分学时数(48)第一章绪论[教学目的] 掌握数据、数据结构和算法的基本概念;了解算法的描述;掌握算法的时间和空间分析。
[教学重点与难点]算法分析第一节引言第二节基本概念和术语第三节算法描述第四节算法分析第二章线性表[教学目的] 掌握线性表的逻辑结构;了解线性表的基本操作和顺序存储结构;掌握插入、删除和定位等操作在顺序表上的实现,掌握线性表的链式存储结构。
[教学重点与难点] 基本操作在顺序表上的实现,单、双链表第一节线性表及其逻辑结构第二节线性表的顺序存储结构第三节线性表的链式存储结构第四节线性表的应用第五节有序表第三章栈和队列[教学目的] 了解栈和队列的概念;掌握栈和队列的存储结构。
[教学重点与难点]栈和队列的存储结构第一节栈第二节队列第四章串[教学目的] 掌握串的基本操作;了解串的存储结构。
[教学重点与难点]串的模式匹配第一节串的基本概念第二节串的存储结构第三节串的模式匹配第五章递归[教学目的] 掌握递归的概念和实现原理;了解递归算法的设计。
西安文理学院精品课《数据结构》教案计算机科学系韩利凯《数据结构》第一章绪论[教学目标]掌握数据结构的定义、内容、方法、描述、评价。
[重点、难点]数据结构的研究范围,研究采用的方法,算法规则描述的工具,对算法作性能评价。
[教学方法]用多媒体课件( ppt )以及与生活实例相结合等方法讲授,这样便于描述相关概念及学生记笔记,加深他们的印象,使基础知识掌握地比较牢固。
[学习要点]1. 熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。
分清哪些是逻辑结构的性质,哪些是存储结构的性质。
2. 了解抽象数据类型的定义、表示和实现方法。
3.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。
4.掌握计算语句频度和估算算法时间复杂度的方法。
1.1 什么是数据结构(定义)首先介绍数据结构的相关名词。
1.数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。
2.数据元素(Data Element)数据元素是组成数据的基本单位 ,是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。
例如:学生登记表是数据,每一个学生的记录就是一个数据元素。
3.数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。
4.数据结构(DA TA Structure)数据结构是指相互之间存在一种或多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。
5.数据类型(Data Type)数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。
6.数据抽象与抽象数据类型1)数据的抽象高级语言中提供整型、实型、字符、记录、文件、指针等多种数据类型,可以利用这些类型构造出象栈、队列、树、图等复杂的抽象数据类型。
西北大学计算机专硕研究生入学考试历年真题集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-西北大学2015年招收攻读硕士学位研究生试题(回忆版) 科目名称:数据结构科目代码:851适用专业:计算机技术、软件工程共2页答案请答在答题纸上,答在本试题上的答案一律无效。
一、简答 [每小题6分,共30分]1、简述四类基本的数据逻辑关系,并用图表示。
2、简述数组、广义表属于线性表原因。
3、算法的定义及特性。
4、什么是平衡二叉排序树平衡因子的取值范围是什么5、简述稳定排序含义,给出两种稳定排序方法以及两种不稳定排序方法名称并证明。
二、分析与方法选择 [每小题10分,共30分]1、折半查找法对待查找的列表哪两个要求?答:必须采用顺序存储结构;必须按关键字大小有序排列。
2、分析快速排序的性能(最好情况、最坏情况)。
3、关于二叉树结点度数的计算。
(牢记二叉树的5条性质,会计算二叉树及K叉树相关的计算。
)三、构造结果 [每小题8分,共40分]1、已知一棵二叉树的前序序列及后序序列,给出其对应的二叉树。
备注:西大历年试卷都是给出前序序列、中序序列或者中序序列、后序序列,写出对应的二叉树,这种题型很好做,且结果给出的二叉树唯一。
但是2015年试题给出的是已知前序序列、后序序列,求对应的二叉树,这题我们平时几乎都没做过,但是其实也不难,往往给出前序序列、后序序列,构造的二叉树不是唯一的,但是这次考题设置的巧妙,最后给出的结果二叉树应该是唯一的。
这道题具体我也不记得了,反正有点难,我也花了很长时间最后才做出来的。
2、图的两种存储结构及表示、深度优先搜索遍历、广度优先搜索遍历、最小生成树的生成。
3、依次输入(26,30,15,10,28,19,18,22),构造二叉排序树,并计算等概率情况下的查找成功的平均查找长度。
4、画出10个元素的折半判定树,并计算等概率情况下查找成功的平均查找长度。
5、最小生成树生成的两种算法:普里姆算法、克鲁斯卡尔算法。
第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。
头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。
首元素结点:线性表中的第一个结点成为首元素结点。
4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)) { printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p);return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。
第一章绪论一、问答题1.什么是数据结构?2.叙述四类基本数据结构的名称与含义。
3.叙述算法的定义与特性。
4.叙述算法的时间复杂度。
5.叙述数据类型的概念。
6.叙述线性结构与非线性结构的差别。
7.叙述面向对象程序设计语言的特点。
8.在面向对象程序设计中,类的作用是什么?9.叙述参数传递的主要方式及特点。
10.叙述抽象数据类型的概念。
二、判断题(在各题后填写“√”或“×”)1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
()2.算法就是程序。
()3.在高级语言(如C或PASCAL)中,指针类型是原子类型。
()三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】i=1时:1 = (1+1)×1/2 = (1+12)/2i=2时:1+2 = (1+2)×2/2 = (2+22)/2i=3时:1+2+3 = (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n = (1+n)×n/2 = (n+n2)/2x=x+1的语句频度为:f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)×n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法,求一元多项式P n(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入a i(i=0,1,…,n),x和n,输出为P n(x0)。