绪论

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

查找
1.查找表是由同一类型的数据元素(或记录)构成的集合
2.对查找表的操作:
查询某个“特定的”数据元素是否在查找表中;
检索某个“特定的”数据元素的各种属性;
在查找表中插入一个数据元素;
从查找表中删去某个数据元素
3.静态查找表:仅作查询和检索操作的查找表。

4.动态查找表:在查找过程中同时插入查找表中不存在的数据
元素,或者从查找表中删除已存在的某个数据元素,此类表为动态查找表
5.关键字:是数据元素(或记录)中某个数据项的值,用以标
识(识别)一个数据元素(或记录)。

6.查找:根据给定的某个值,在查找表中确定一个其关键字等
于给定值的数据元素或(记录)。

7.平均查找长度ASL:为确定记录在表中的位置,需和给定值
进行比较的关键字的个数的期望值叫查找算法的~
8.顺序表的查找:从表的一端开始逐个进行记录的关键字和给
定值的比较。

9.顺序表查找的平均查找长度为:ASL=(n+1)/2 。

顺序表的查
找算法简单,但平均查找长度较大,不适用于表长较大的查找表。

10.折半查找:每次将待查记录所在区间缩小一半。

适用于采用
顺序存储结构的有序表。

ASL=log2(n+1)--1
11.索引顺序查找:又称分块查找,将表分成几块,块内无序,
块间有序;先确定待查记录所在块,再在块内查找。

适用于分块有序表
12.动态查找表的特点:表结构本身是在查找过程中动态生成。


表中存在其关键字等于给定值key的记录,表明查找成功;否则插入关键字等于key的记录。

13.二叉查找树:二叉排序树或者是一棵空树;或者是具有如下
特性的二叉树:若它的左子树不空,则左子树上所有结点的值均小于根结点的值;若它的右子树不空,则右子树上所有结点的值均大于根结点的值;它的左、右子树也都分别是二叉排序树。

14.二叉排序树的查找算法:若二叉排序树为空,则查找不成功;
否则1)若给定值等于根结点的关键字,则查找成功;2)若给定值小于根结点的关键字,则继续在左子树上进行查找;
3)若给定值大于根结点的关键字,则继续在右子树上进行查找。

15.二叉排序树的插入算法:根据动态查找表的定义,“插入”
操作在查找不成功时才进行;若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。

16.一个无序序列可以通过构造一棵二叉排序树而变成一个有
序序列;每次插入的新结点都是二叉排序树上新的叶子结点;插入时不必移动其它结点,仅需修改某个结点的指针17.二叉排序树的删除算法:和插入相反,删除在查找成功之后
进行,并且要求在删除二叉排序树上某个结点之后,仍然保
持二叉排序树的特性。

可分三种情况讨论:1)被删除的结点是叶子2)被删除的结点只有左子树或者只有右子树;3)被删除的结点既有左子树,也有右子树。

18.被删除的结点是叶子结点,其双亲结点中相应指针域的值改
为空;被删除的结点只有左子树或者只有右子树,其双亲结点的相应指针域的值改为“指向被删除结点的左子树或右子树”;被删除的结点既有左子树,也有右子树,以左子树的最大值或右子树的最小值替换
19.二叉平衡树:是二叉查找树的另一种形式,其特点为:树中
每个结点的左、右子树深度之差的绝对值不大于1
小结:
(1)查找又称为检索,是从一个数据元素(记录)的集合中,按某个关键字值查找特定数据元素(记录)的一种操作。

若表中存在这样一个数据元素(或记录),则查找成功;否则,查找失败。

(2)查找可以分为静态查找和动态查找。

在查找过程中仅查找某个特定元素是否存在或它的属性的,称为静态查找;在查找过程中对查找表进行插入元素或删除元素操作的,称为动态查找。

(3)查找算法的效率,主要是看要查找的值与关键字的比较次数,通常用平均查找长度(ASL)来衡量。

(4)顺序查找对查找表无任何要求,既适合无序表又适合有序表,其查找成功的平均查找长度为(n+1)/2,时间复杂度为O(n)绪论
(1)数据结构就是研究数据的逻辑结构、存储结构和运算方法的学科。

(2)数据的逻辑结构包括:集合、线性结构、树形结构、图形结构四种类型。

(3)集合中不存在数据之间的关系;线性结构元素之间存在一对一的关系;树形结构元素之间存在一对多的关系;
图形结构间存在多对多的关系。

具有一对多和多对多关系的结构又称为非线性结构。

(4)数据的存储结构包括:顺序存储、链式存储、索引存储、散列存储四种。

(5)顺序存储可采用一维数组来存储;链式存储可以采用链表结构来存储;索引存储则在原有存储数据结构的基础上,附加建立一个索引表来实现,主要作用是为了提高数据的检索速度;而散列存储则是通过构造散列函数来确定数据存储地址或查找地址的。

(6)算法是对特定问题求解步骤的一种描述,是指令的有限序列。

算法具有:有穷性、确定性、正确性、输入、输出等特性。

(7)一个好的算法应该达到:正确性、可读性、健壮性、高效性和低存储量等目标。

(8)算法的效率通常用时间复杂度与空间复杂度来评价,应该逐步掌握其基本分析方法。

(9)通常把算法中包含简单操作次数的多少叫做算法的时间复杂度。

一般只要大致计算出相应的数量级即可;一个程序的空间复杂度是指程序运行从计算机获取的空间资源。

一、选择题
1、( )是数据的基本单位。

A) 数据结构B)数据元素C)数据项
D)数据类型
2、以下说法不正确的是( )。

A)数据结构就是数据之间的逻辑结构。

B)数据类型可看成是程序设计语言中已实现的数据结构。

C)数据项是组成数据元素的最小标识单位。

D)数据的抽象运算不依赖具体的存储结构。

3、计算机算法是解决问题的有限运算序列,它具备输入、输出和()等5个特性。

A)可执行性、可移植性和可扩充性B)可行性、确定性和有穷性
C)确定性、有穷性和稳定性D)易读性、稳定性和安全性
4、一般而言,最适合描述算法的语言是( )。

A)自然语言B)计算机程序语言
C)介于自然语言和程序设计语言之间的伪语言D)数学公式
5、通常所说的时间复杂度指( )。

A)语句的频度B)算法的时间消耗
C)渐近时间复杂度D)最坏时间复杂度
6、A算法的时间复杂度为O(n3),B算法的时间复杂度为O(2n),则说明( )。

A)对于任何数据量,A算法的时间开销都比B算法小
B)随着问题规模n的增大,A算法比B算法有效
C)随着问题规模n的增大,B算法比A算法有效
D)对于任何数据量,B算法的时间开销都比A算法小
7、算法分析的目的是()。

A)找出数据结构的合理性B)研究算法中的输入和输出的关系
C)分析算法的效率以求改进D)分析算法的易懂性和文档性
8、下面程序段的时间复杂度为()。

for( i=0; i<m; i++)
for( j=0; j<n; j++)
a[i][j]=i*j;
A)O(m2) B) O(n2) C) O(m*n) D) O(m+n)
9、执行下面程序段时,执行S语句的次数为()。

for(i=1; i<=n; i++)
for(j=1; j<=i; j++) S;
A) n2B) n2/2 C) n(n+1) D) n(n+1)/2
10、下面算法的时间复杂度为( )。

int f( int n ) {
if ( n==0 || n==1 ) return 1;
else return n*f(n-1);
}
A) O(1) B) O(n) C) O(n2) D) O(n!)
1、数据的( )结构依赖于计算机语言。

2、在线性结构中,第一个结点()前驱结点,其余每个结点有且只有()个前驱结点;最后一个结点()后继结点;其余每个结点有且只有()个后继结点。

3、在树形结构中,树根结点没有()结点,其余每个结点有且只有()个前驱结点;叶子结点没有()结点,其余每个结点的后继结点可以()。

4、在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着( ) 、()和()的关系。

5、评价一个算法优劣的两个主要指标是()和()。

6、数据的逻辑结构被分为( )、( )、( )和( )四种。

7、数据的存储结构被分为( )、()、()、()四种.
8、算法的时间复杂度除了与问题的规模有关外,还与输入实例的( )有关。

1、设两个算法在同一台机器上执行,其执行时间分别是n2和2 n,要使前者快于后者,n至少需要多大?
2、有时为比较两个同数量级的算法优劣,须突出主项的常数因子,而将低次项用”O”记号表示。

如:设T1 ( n ) = 1.39 n log n + 100 n + 256 = 1.39 n log n + O ( n ) ;
T2 ( n ) = 2.0 n log n -2 n = 2.0 n log n –O( n ) ;
这两个式子表示,当n足够大时,T1 ( n )优于T2 ( n ),因为前者的系数因子小于后者。

请用此方法表示下列函数,并指出当n足够大时,哪一个较优,哪一个较劣。

(1 ) T1 ( n ) = 5n 2 -3 n +60 log n ;
(2 ) T2 ( n ) = 3 n 2 +1000 n + 3 log n ;
(3 ) T3 ( n ) = 8 n 2 + 3 log n ;
(4 ) T4 ( n ) = 1.5 n 2 + O ( n ) 。

1.1 简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。

(1)数据结构就是研究数据的逻辑结构、存储结构和运算方法的学科。

(2)数据的逻辑结构包括:集合、线性结构、树形结构、图形结构四种类型。

(3)集合中不存在数据之间的关系;线性结构元素之间存在一对一的关系;树形结构元素之间存在一对多的关系;图形结构间存在多对多的关系。

具有一对多和多对多关系
的结l 构又称为非线性结构。

(4)数据的存储结构包括:顺序存储、链式存储、索引存储、散列存储四种。

(5)顺序存储可采用一维数组来存储;链式存储可以采用链表结构来存储;索引存储则在原有存储数据结构的基础上,附加建立一个索引表来实现,主要作用是为了提高数据的检索速度;而散列存储则是通过构造散列函数来确定数据存储地址或查找地址的。

(6)算法是对特定问题求解步骤的一种描述,是指令的有限序列。

算法具有:有穷性、确定性、正确性、输入、输出等特性。

(7)一个好的算法应该达到:正确性、可读性、健壮性、高效性和低存储量等目标。

(8)算法的效率通常用时间复杂度与空间复杂度来评价,应该逐步掌握其基本分析方法。

(9)通常把算法中包含简单操作次数的多少叫做算法的时间复杂度。

一般只要大致计算出相应的数量级即可;一个程序的空间复杂度是指程序运行从计算机获取的空间资源。

◆数据:指能够被计算机识别、存储和加工处理的信息载体。

◆数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。

数据元素有时可以由若干数据项组成。

◆数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。

◆数据结构:指的是数据之间的相互关系,即数据的组织形式。

一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。

◆逻辑结构:指各数据元素之间的逻辑关系。

◆存储结构:就是数据的逻辑结构用计算机语言的实现。

◆线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。

线性表就是一个典型的线性结构。

◆非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。

i=1; k=0
while(i<n)
{ k=k+10*i;i++;
}
T(n)=n-1
∴T(n)=O(n)
◇这个函数是按线性阶递增的
(2) i=0; k=0;
do{
k=k+10*i; i++;
}while(i<n);
◆T(n)=n
∴T(n)=O(n)
◇这也是线性阶递增的
(3) i=1; j=0;
while(i+j<=n)
{
if (i<j)j++;
else i++;
}
◆T(n)=n/2
∴T(n)=O(n)
◇虽然时间函数是n/2,但其数量级仍是按线性阶递增的。

(4)x=n; // n>1
while (x>=(y+1)*(y+1))
y++;
◆T(n)=n1/2
∴ T(n)=O(n1/2)
◇最坏的情况是y=0,那么循环的次数是n1/2次,这是一个按平方根阶递增的函数。

(5) x=91; y=100;
while(y>0)
if(x>100)
{x=x-10;y--;}
else x++;
◆T(n)=O(1)
◇这个程序看起来有点吓人,总共循环运行了1000次,但是我们看到n没有? 没。

这段程序的运行是和n无关的,就算它再循环一万年,我们也不管他,只是一个常数阶的函数。

1已知单链表H,写一算法将其倒置。

算法如下:
void reverse (Linklist H)
{ LNode *p;
p=H->next; /*p指向第一个数据结点*/
H->next=NULL; /*将原链表置为空表H*/
while (p)
{ q=p; p=p->next;
q->next=H->next; /*将当前结点插到头结点的后面
H->next=q; }
}
已知单链表L,写一算法,删除其重复结点。

void pur_LinkList(LinkList H)
{ LNode *p,*q,*r;
p=H->next; /*p指向第一个结点*/
if (p==NULL) return;
while (p->next)
{ q=p;
while (q->next) /* 从*p的后继开始找重复结点
{ if (q->next->data==p->data)
{ r=q->next; /*找到重复结点,用r指向,删除*r
q->next=r->next;
free(r); }
else q=q->next; }
p=p->next; /*p指向下一个,继续*/
}
}
3 设有两个单链表A、B,其中元素递增有序,编写算法将A、B 归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。

LinkList merge(LinkList A,LinkList B) /*设A、B均为带头结点的单链表*/
{ LinkList C; LNode *p,*q;
p=A->next; q=B->next; free(B);
C=A; C->next=NULL; /*C表的头结点*/
while (p&&q)
{ if (p->data<q->data) { s=p;p=p->next; }
else {s=q;q=q->next;} /*从原AB表上摘下较小者
s->next=C->next; C->next=s; /*插入到C表的头部*/
}
if (p==NULL) p=q;
while (p) /* 将剩余的结点一个个摘下,插入到C表的头部*/
{ s=p; p=p->next;
s->next=C->next;C->next=s;}
}
已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符和其它字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。

解:要解决这样的问题,只要新建三个头结点,然后在原来的单链表中依次查询,找到一类字符结点时,就摘下此结点链接到相应头结点指明的新链表中就是了。

算法如下:
void DivideL ist( LinkList L, LinkList A, LinkList B, LinkList C)
{
ListNode *p=L->next, *q;
ListNode *a=A; ListNode *b=B; ListNode *c=C;
while ( p ) {
if ( p->data>='a' &&p->data<='z'|| p->data>='A' &&p->data<='Z')
{
q=p; //保存字母结点位置
p=p->next;//指向下一结点
a->next=q;//将字母结点链到A表中
q->next=A;// 形成循环链表
a=a->next; // 指向下一结点
}
else if( p->data>='0' && p->data<='9')
{ // 分出数字结点
q=p; p=p->next;
b->next=q; q->next=B;
b=b->next;
}
else
{ //分出其他字符结点
q=p; p=p->next;
c->next=q; q->next=C;
c=c->next;
}
}
}//结束
2.18 设有一个双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。

每当在链表迚行一次LocateNode(L,x)运算时,令元素值为x的结点中freq域的值加1,并调整表中结点的次序,使其按访问频度的递减序排列,以便使频繁访问的结点总是靠近表头。

试写一符合上述要求的LocateNode运算的算法。

2.18 解:给freq域的值加1比较容易。

就是每次加1后需迚行排序比较麻烦。

我们可以这样考虑,每次访问一个值为x的结点后,从表头开始找,根据结点中的freq值,如果找到比它小的结点,就把当前结点摘下,插入到freq值比它小的结点前面,就完成排序了。

算法如下:
void LocateNode( LinkList L, DataType x)
{
ListNode *p, *q;
p=L->next; //带有头结点
q=L->next;
while( p )
{
if( p->data!=x) p=p->next;
else {
p->freq++;
break;
}
}
while ( q )
{
if( q->freq > p->freq) q=q->next;
else {
p->prior->next=p->next; //摘下当前结点
p->next=q; //插入到freq不大于它的结点前
p->prior=q->prior;
}
}
定点符号法:表示呈点状分布的物体,采用不同形状、大小和颜色的符号,表示物体的位置、性质和数量特征。

由于符号定位于物体的实际分布位置上,故称定点符号法。

线状符号法:用于表示呈现线状分布的现象,如河流、海岸线、交通线、地质构造线、山脊线等。

范围法:表示呈间断成片分布的面状现象.如森林、沼泽、湿地、某种农作物的分布和动物分布等.
质底法:表示连续分布、布满于整个区域的面状现象。

如地质现象、土地利用状况和土壤类型等
等值线法:用等值线的形式表示布满全区域的面状现象。

定位图表法:用统计图表的形式反映定位于制图区域某些点上周期性现象的数量特征和变化的方法。

点数法:用一定大小、形状相同的点群,表示制图区域中呈分散的、复杂分布现象的分布范围,数量特征和分布密度的方法,称点数法。

运动线法:运动线法又称动线法,用矢状符号和不同宽度、颜色的条带表示现象移动的方向、路径和数量、质量特征。

等值区域法(分级统计图法):在制图区域内按行政区划或自然区划区分出若干制图单元,根据各单元的统计数据并对他们分级,用不同的色阶或晕线网纹反映各分区现象的集中程度或发展水平的方法
分区统计图法:在各分区单元内按统计数据描绘成不同形式的统计图表,置于相应的区划单元内,以反映各区划单元内现象的总量、构成和变化。

1)符号法和定位图表法
联系:表示手段相近,都是用有定位意义的符号或图表表达现特征。

区别:(1)符号法反映呈点状分布的现象。

尽可能反映全部点的分布状况;定位图表法利用典型点上的现象来说明整个面上或线上现象的特征。

(2)符号法说明特定时刻的或某一段时期内的现象;定位图表法主要用于说明周期性发生的现象。

(3)符号法每个点有较强的独立性,定位图表法表示一个点不能全面反映制图区域的现象。

2)符号法和分区统计图表法
联系:两种表示方法表示的手段可以完全一样。

都可以表示现象的数、质量指标。

区别:符号法中的每个符号在地图上的位置代表具体物体的实地位置,它的大小表示该现象在该点的数量指标。

符号之间可以压盖。

其表示的是在空间呈点状分布现象的特征。

分区统计图表中的每个图形并不代表某一具体物体,而是代表某个区划单位内某全部现象的总和,它可配置在区域内的任一适当位置。

通常情况下图表之间不可以相互压盖。

其表示的是在空间呈点、线、面状分布现象的特征。

3)线状符号法与运动线法
联系:线状符号法与运动线法均可用线状的符号表示定位于线(或两点间)的专题现象,有些图上两种方法形式上也颇相似。

区别:(1)线状符号法是表示实地呈线状分布现象的分布,是反映静态的现象;运动线法则反映各种分布特征现象的运动(或发展)状况,是反映动态的现象(2)线状符号法一般是反映现象的质量特征,如海岸类型、道路种类等等,运动线法则常用复杂的“带”表示现象的数量和质量特征。

(3)线状符号的结构一般比较简单,定位比较精确;运动线法的结构有时很复杂,定位亦不够精确,有时仅表示两点间的联系或概略的移动路线,在表示面状现象时,符号只表示运动的趋向,并无定位意义
4)范围法与质底法
联系:范围法与质底法都是反映面状分布现象的方法,并且都是以底色、晕线或花纹等形式反映质量特征为主的
区别:(1)范围法表示的是某一种或几种专题现象分布的具体范围,几种现象的分布范围可能会重叠,在范围外无此类现象的地区成为空白。

质底法表示的是全制图区域内按现象的质量指标进行的分区,分区不可能重叠,全区也无空白;范围法能表示现象的渐进性和渗透性,而质底法一般不能表示现象的渐进性。

(2)范围法往往是根据各具体现象的各自分布状况描绘它们的范围轮廓,而质底法中的各区域则是在统一的原则和要求下,经过科学的概括而划分的。

所以,范围法中各区域范围是各自独立、互不依存的,不同现象的范围轮廓的概括程度也不一定是同等的。

质底法中的分区单位间却有密切的联系,它们彼此毗连,有着同等的概括程度,如果这一分区范围扩大,必然是另一区域缩小,不同的概括程度则会改变原来对分区指标的正确反映。

(3)用范围法表示的图上,同一种颜色或晕线(花纹)只代表一种具体的现象范围,如红色表示棉花、蓝色表示水稻。

质底法中同一颜色有时固定代表每一类现象(如地质图、土壤图、植被图等等类型图),有的则不一定固定代表某种现象,而仅仅用以表示区域单元的差别,如政区图中的各行政区。

5)点数法与分级统计图法
联系:这两种方法都可以用来表示分散分布的现象的集中程度和发展水平。

区别:(1)表示的手段不同(2)分级统计图法能简单而鲜明地反映地区间的差别,尤其是反映各区域经济现象的不同发展水平,能各地区简单的相对数量指标的概念。

点数法能较好地现象分布的地理特征,它能反映现象的绝对指标。

(3)点数法比分级统计图法统计得详细,但分级统计图法更实用。

易于设计与制作。

6)分区统计图表法与分级统计图表法
联系:分区统计图表法与分级统计图表法均是以统计资料为基础的表示方法。

他们都能反映各区划单元之间的数量差别,但不能反映每个区划单元内部的具体差异。

区别:(1)分区统计图表法的分区比较固定,如以某一级行政区域为划分依据,分级统计图法则不然,它是以相对数量指标的分级为划分依据的(各级所包括的分区的数目不一定同等且不固定)。

当分级改变后,各色级的范围也随之改变。

(2)当各个区划单元的数量指标值很接近时,从分区统计图表上很难看出它们的差别,而在分级统计地图上,只要适当地选择分级,就可清楚地表现出其微小的差别。

其次,在同一幅分区统计图表上,可以明显地反映出现象的几种指标的结构,分级统计图上则很困难。

但表示单个指标时,色级要比统计图表明显得多。

(3)分级统计图法可以与其他精确制图方法配合使用,但分区统计图表法较难配合,特别与符号法不宜一起出现。

}。

相关文档
最新文档