当前位置:文档之家› 数据结构整理完整版

数据结构整理完整版

数据结构整理完整版
数据结构整理完整版

第二章线性表

一、顺序表和链表的优缺点

1.顺序表

定义:用一组连续的存储单元(地址连续)依次存放线性表的各个数据元素。即:在顺序表中逻辑结构上相邻的数据元素,其物理位置也是相邻的。

优点

逻辑相邻,物理相邻

可随机存取任一元素

存储空间使用紧凑

缺点

插入、删除操作需要移动大量的元素(平均约需移动一半结点,当n很大时,算法的效率较低)

预先分配空间需按最大空间分配,利用不充分

表容量难以扩充

2.链式存储结构

定义:由分别表示a1,a2,…,a i-1,a i,…,a n的N 个结点依次相链构成的链表,称为线性表的链式存储表示

优势:

(1)能有效利用存储空间;

动态存储分配的结构,不需预先为线性表分配足够大的空间,而是向系统“随用随取”,在删除元素时可同时释放空间。

(2)用“指针”指示数据元素之间的后继关系,便于进行“插入”、“删除”等操作;

插入或删除时只需要修改指针,而不需要元素移动。

劣势:

(1)不能随机存取数据元素;

(2)丢失了一些顺序表的长处,如线性表的“表长”和数据元素在线性表中的

“位序”,在单链表中都看不见了。如,不便于在表尾插入元素,需遍历整个表才能找到插入的位置。

二、单链表中删除一个节点和插入一个节点的语句操作,p29

1.插入元素操作

算法基本思想:首先找到相应结点,然后修改相应指针。

假定在a,b之间插入结点X,s指向X, p指向a,指针修改语句为:

s->next=p->next; p->next =s;

2.删除元素操作

算法基本思想:首先找到第i-1 个结点,然后修改相应指针。

删除b结点,其中,P指向a,指针修改语句为:p->next=p->next->next;

三、单链表的就地逆置习题集2.22

算法的基本思想:以单链表作存储结构进行就地逆置的正确做法应该是:将原链表的头结点和第一个元素结点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即令每个插入的结点成为新的第一个元素结点)。

算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。

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;

}

}

第三章栈和队列

一、栈和队列的特性

1.特点

栈必须按“后进先出”(LIFO)的规则进行操作,仅限在表尾进行插入和删除的操作。

队列(FIFO)必须按“先进先出”的规则进行操作,队尾插入,队头删除。

二、循环队列为空和满的判定方法,p63

队空条件:front == rear;

队满条件:(rear + 1) % maxSize == front

第四章串

一、模式匹配的改进算法

求Next 数组 1) Next[j]的定义

2) 求解

第五章数组与广义表

一、对称矩阵和上(下)三角矩阵的压缩存储

1. 对称矩阵的压缩存储

若一个n 阶方阵A 中的元素满足a i,j =a j,i (1≤i,j≤n),则称其为n 阶对称矩阵。 (1)只存储对称矩阵中上三角或下三角中的元素 (2)将n 2个元素压缩存储到n(n+1)/2个元素的空间中,以一个一维数组作为A 的存储空间。

2. 下三角矩阵的压缩存储B[n(n+1)/2+1]

(1)1,2(1)1,2i i j i j k j j i i j

-?+-≥??=?

-?+-

1,2

(1),2

i i j i j k n n i j -?+-≥??=?

+?

3. 上三角矩阵的压缩存储B[n(n+1)/2+1]

二、理解广义表的取表头和表尾的操作

1. 广义表的表头(Head)和表尾(Tail):

当广义表LS=(a 1,a 2,…,a i ,…,a n )非空时,称第一个元素a 1为广义表的表头,其余

元素组成的表(a 2, a 3, …,a n )称为广义表的表尾。表头可能是原子,也可能是广义表,但表尾一定是广义表。 2. 取表头GetHead(LS) = a 1。 3. 取表尾GetTail(LS) = (a 2,a 3,…,a n )。 4. 取表头表尾示例

①B=(e) GetHead(B) = e; GetTail(B) = ( ). ②A=(a, ((b, c), d, e)) GetTail(A)=(((b, c), d, e))

GetHead( GetTail(A))=((b, c), d, e)

GetHead( GetHead( GetTail(A))) = (b, c). ③A=( ); B = ( ( ) )

A 空表,长度0,深度1,无表头和表尾;

B 长度1,深度2,表头( ),表尾( )。

第六章树和二叉树

一、 二叉树先序、中序和后序的关系p154

1.二叉树遍历的概念

二叉树的遍历是指按照一定次序访问树中所有结点,并且每个结点仅被访问一次的过程。它是最基本的运算,是二叉树中所有其他运算的基础。

2.先序遍历(DLR )操作过程: 若二叉树为空,则空操作,否则 (1) 访问根结点;

(2) 按先序遍历左子树; (3) 按先序遍历右子树。 3.中序遍历(LDR )操作过程: 若二叉树为空,则空操作,否则: (1) 按中序遍历左子树; (2) 访问根结点;

(3) 按中序遍历右子树。

(1)(22)

,2

(1),2

i n i j i i j k n n i j

--+?+-≤??=?

+?>??当当

4.后序遍历(LRD)操作过程:

若二叉树为空,则空操作,否则:

(1) 按后序遍历左子树;

(2) 按后序遍历右子树;

(3) 访问根结点。

5.遍历示例:

6.强调:给定结点的前序序列和中序序列可以唯一确定一棵二叉树。见P154例6-5,必须掌握。

二、 二叉树向森林的转换

1.将一棵二叉树还原为树或森林,具体方法如下:

(1)若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子……都与该结点的双亲结点用线连起来。

(2)删掉原二叉树中所有双亲结点与右孩子结点的连线。 (3)整理由(1)、(2)两步所得到的树或森林,使之结构层次分明。

2.二叉树到森林的转换示例

三、 算法:

题目要求:实现一次遍历二叉树即可求得根结点到树中每个叶结点的路径,试用C 语言描述该算法。以二叉链表存储表示二叉树,结点的结构为(lchild, data, rchild)。

————树节点结构—————— Typedef struct BInode{ TElemType data;

Struct Binode *lchild,rchild; } Binode,*BiTree;

void AllPath(Bitree T, Stack &S)//输出二叉树上从根到所有叶子结点的路径 {

if(T) {

Push(S,T->data);

if(!T->Left&&!T->Right)//如果左指针和右指针同时为空,才说明该节点为

叶子节点

PrintStack(S);

else {

AllPath(T->Left,S);

(a) 添加连线

(b) 删除右孩子结点的连线

(c) 整理

AllPath(T->Right,S); }

Pop(S); }

四、 哈夫曼树

1.构造哈夫曼树(哈夫曼算法)

① 由给定的n 个权值{W 1,W 2,...,W n },构造n 棵只有一个叶子结点的二叉树,从而得到一个二叉树的集合F={T 1,T 2,...,T n }; ② 在F 中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和; ③ 在集合F 中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F 中; ④ 重复(2)、(3)两步,当F 中只剩下一棵二叉树时,这棵二叉树便是所要建立的哈夫曼树。 2.哈夫曼构造示例:

3.哈夫曼编码(最优前缀编码)

右图对应的哈夫曼编码如下:

a :000

b :001

c :01

d :1

哈夫曼编码树中没有度为1的结点。n 个叶子结点,共有2n-1个结点。 强调:建立的哈弗曼树不唯一,编码也不唯一,但是不同哈弗曼编码的树的带权路径长度都是一样的,都是最小的。

第七章图

一. 图邻接矩阵的表示方法

1. 邻接矩阵表示法(数组表示法) 图G 是一个具有n 个顶点的无权图,G 的邻接矩阵是具有如下性质的n×n 矩阵A :

若图G 是一个有n 个顶点的网,则它的邻接矩阵是具有如下性质的n×n 矩阵A :

邻接矩阵表示法示例:

邻接矩阵表示法类型描述

#define MAX_VERTEX_NUM 20 //最多顶点个数 #define INFINITY INT_MAX //表示极大值∞ typedef enum{DG, DN, UDG, UDN} GraphKind; typedef struct ArcCell{ VRType adj; InfoType *info;

} ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct{

VertexType vexs [MAX_VERTEX_NUM]; //顶点向量 AdjMatrix arcs; //邻接矩阵

int vexnum, arcnum; //图的顶点数和弧数 GraphKind kind; //图的种类标志

1, ,),[,]0, i j i j v v v v V A i j <>∈??=???若(或其它

, ,),[,], ij i j i j w v v v v V

A i j <>∈??=?

∞??若(或其它(a) (b) ????

?

???

????????=01101101111101001101110101A ????

??

??????????=01001000001100001100010102A

} MGraph;

邻接矩阵的特点如下:

(1)图的邻接矩阵表示是惟一的。

(2)无向图的邻接矩阵一定是一个对称矩阵。在具体存放邻接矩阵时只需

存放上(或下)三角形阵的元素。

(3)不带权的有向图的邻接矩阵一般来说是一个稀疏矩阵,因此,当图的顶

点较多时,可以采用三元组表的方法存储邻接矩阵。

(4)对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正

好是第i个顶点v i的度。

(5)对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正

好是第i个顶点vi的出度(或入度)。

(6)用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相

连。但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。这是用邻接矩阵存储图的局限性。

二、G是非连通无向图,共28条边,至少有多少个顶点?

答案:9个顶点

三、算法

?(1)用C写出图的邻接表表示法描述;

?(2)写出用邻接表表示法时,在无向图中删除一条边(v,w)的算法。

?(3)设图中顶点个数为n,边条数为e,分析并给出上述删除算法的时间复杂度。

解:(1)邻接表存储结构的类型定义:

typedef struct ArcNode{//表结点结构类型

int adjvex; //该弧(边)的终点位置

struct ArcNode *nextarc; //指向下一条弧的指针

InfoType info; //该弧的相关信息

} ArcNode;

typedef struct Vnode {//头结点的类型

Vertex data; //顶点信息

ArcNode *firstarc; //指向第一条弧

} VNode, AdjList[MAX_VERTEX_NUM];

typedef struct {//邻接表

AdjList vertices;

int vexnum, arcnum; //图中顶点数n和边数e

int kind; //图的类型

} ALGraph;

(2)删除算法如下:

void DeleteArc(ALGraph &G)

{

int v1,v2,k=0,i;

ArcNode *p,*q; //节点指针

printf("请输入要删除边的起点和终点:");

scanf("%d %d",&v1,&v2); //要删除的边的端点

printf("\n");

for(i=0;i

if(G.vertices[i].data==v1)break;

p=G.vertices[i].firstarc;

q=NULL;

while(p!=NULL)

{

if(p->adjvex==v2)

{

if(q==NULL)

{

G.vertices[i].firstarc=p->nextarc;

free(p);

k++;

break;

}

else

{

q->nextarc=p->nextarc;

free(p);

k++;

break;

}

}

else

{

q=p;

p=p->nextarc;

}

}

if(k!=0)

printf("成功删除该边!\n");

else

printf("没有找到该边!\n");

}

(3)上述算法中,第一个while语句的时间复杂度为O(n),对于第二个while

语句,在平均情况下,时间复杂度为

e

O

n

??

?

??

,此时,总的时间复杂度为

e

O n

n

??

+

?

??

在最坏的情况第二个while语句的时间复杂度是()

O e,此时,总的时间复杂度是

O n e

()

第九章查找

一.二叉搜索树的构建p229

1.二叉排序树的定义

或者是一棵空树,或者是具有下列性质的二叉树:

1)若其左子树不空,则左子树上所有结点的值均小于它的根结点的值;

2)若其右子树不空,则右子树上所有结点的值均大于它的根结点的值

3)其左、右子树也分别为二叉排序树

2.创建二叉树

创建二叉排序树:

BiTree CreatBST(int n)

{

建立n个关键字的二叉排序树;

从键盘输入调建立n个关键字依次用InsertBST1(插入函数);

返回根结点T;

输出过程;

}

BSTree createBST()//建立二叉树

{

BSTree t=NULL; //根结点

KeyType key;

cin>>key;

while(key!=-1)

{

t=insertBST(t,key);

cin>>key;

}

return t;

}

插入:在二叉排序树中插入键值等于key的记录

若二叉排序树为空树,则插入元素作为树根结点;

若根结点的键值等于key,则插入失败;

若key小于根结点的键值,则插入到根的左子树上;否则,插入到根的右子树上;

新插入的结点一定是个叶子结点

void InsertBST1(BiTree &T,BiTNode *s)

{

在二叉树排序树T中,插入一个结点s(递归算法);

被CreatBST函数调用;

}

BSTree insertBST(BSTree tptr,KeyType key)// 在二叉排序树中插入结点

{ //若二叉排序树tptr中没有关键字为key的结点,则插入,否则直接返回

BSTree f,p=tptr; //p的初值指向根结点

while(p) //查找插入位置,循环结束时,p是空指针,f指向待插入结点的双亲

{

if(p->key==key) //树中已有key,无须插入

return tptr;

f=p; //f保存当前查找的结点,即f是p的双亲

p=(keykey)?p->left:p->right;

}

p=(BSTree )malloc(sizeof(BSTNode)); //生成新结点

p->key=key; p->left=p->right=NULL;

if(tptr==NULL) //原树为空,新插入的结点为新的根

tptr=p;

else

if(keykey)

f->left=p;

else

f->right=p;

return tptr;

}

3.二叉排序树创建示例

{45,12,53,37,24,3,100,61,90,60,78}。结果如下:

二、二叉搜索树中查找元素的比较次数分析

若查找成功,则走了一条从根结点到某结点的路径,若查找失败,则走到一棵空的子树时为止。因此,最坏情况下,其平均查找长度不会超过树的

高度。

含有n个结点的二叉排序树的平均查找长度和树的形态有关。当先后插入的关键字有序时,构成的二叉树蜕变为单支树,树的深度为你,其平均查

找长度为n+1

2

,这是最差的情况。显然,最好的情况是二叉排序树的形态

和折半查找的判定数相同其平均查找长度和

2

log n成正比。二叉排序树的平均查找长度和log n是等数量级的。

三、二叉搜索树的平衡化

1.平衡二叉树(AVL树)定义

平衡二叉树或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左、右子树的深度之差的绝对值不超过1。

2.平衡化:在插入过程中,采用平衡旋转技术。

单向右旋平衡处理:在某结点左子树的左子树上插入一个结点,使平衡因子由1 变成2 ,使其失去平衡。(“/型”)

调整方式:单向右旋

单向左旋平衡处理:在某结点右子树的右子树上插入一个结点,使平衡因子由-1 变成-2 ,使其失去平衡。(“\型”)

调整方式:单向左旋

双向旋转(先左后右)平衡处理:在某结点左子树的右子树上插入一个结点,使平衡因子由1 变成2 ,使其失去平衡。(“<型”)

调整方式:以中间值为轴,先左旋,然后再右旋

双向旋转(先右后左)平衡处理:在某结点右子树的左子树上插入一个结点,使平衡因子由-1 变成-2 ,使其失去平衡。

调整方式:以中间值为轴,先右旋,然后再左旋。

四、Hash表的链地址解决冲突的方法

链地址法也称拉链法,是把相互发生冲突的同义词用一个单链表链接起

来,若干组同义词可以组成若干个单链表。

例子:给定关键字{ 19, 01, 23, 14, 55, 68, 11, 82,36 }

哈希函数为H(key)=key MOD 7

第十章内部排序

一.快速排序方法的过程p275

1.快速排序(Quick Sort)基本思想

任取待排序对象序列中的某个对象(例如取第一个对象) 作为基准,按照该

对象的关键码大小,将整个对象序列划分为左右两个子序列:

?左侧子序列中所有对象的排序码都小于或等于基准对象的排序码

?右侧子序列中所有对象的排序码都大于基准对象的排序码

?基准对象排在这两个子序列中间(这也是该对象最终应安放的位置)。

?然后分别对这两个子序列重复施行上述方法,直到所有的对象都排在相应位置上为止

2.一趟快速排序的具体做法是:

设两个指针low和high,设基准记录的关键码为pivotkey

首先从high所指位置起向前搜索找到第一个关键字小于pivotkey的记录

和基准记互相交换

然后从low所指位置起向后搜索,找到第一个关键字大于pivotkey的记录

和基准记录互相交换

重复这两步直至low=high为止。

3.示例

二、各种排序方法的大概思想

1.插入排序(Insert Sorting)

每步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。

2.快速排序( Exchange Sort )

两两比较待排序对象的关键码,如发生逆序(即排列顺序与排序后的次序正好相反),则交换,直到所有对象都排好序为止。

3.选择排序

每一趟(例如第i 趟,i = 0,1,…,n-2) 在后面n-i 个待排序记录中选出排序码最小的记录,作为有序序列中的第i 个记录。待到第n-2 趟作完,待排序记录只剩下1个,就不用再选。

4.归并排序

两路归并(2-way merging):原始序列initList[ ]中两个有序表initList*l+ … initList[m]和initList*m+1+ … initList*n+,它们可归并成一个有序表,存于另一对象序列mergedList的l … n 中。

5.基数排序:借助“分配”和“收集”对单逻辑关键字进行排序的一种方法

多关键字排序方法

最高位优先法(MSD):先对最高位关键字k1(如花色)排序,将序列分成若干子序列,每个子序列有相同的k1值;然后让每个子序列对次关键字k2(如面值)排序,又分成若干更小的子序列;依次重复,直至就每个子序列对最低位关键字kd排序;最后将所有子序列依次连接在一起成为一个有序序列。

最低位优先法(LSD):从最低位关键字kd起进行排序,然后再对高一位的关键字排序,……依次重复,直至对最高位关键字k1排序后,便成为一个有序序列。

三、最小堆的建立过程p281,图10.12

1.堆排序分为两个步骤

①根据初始输入数据,利用堆的调整算法HeapAdjust( ) 形成初始堆;

②通过一系列的对象交换和重新调整堆进行排序。

2.最小堆的自上而下调整过程

其中第二步--调整的过程为:输出堆顶元素后用堆中最后一个元素替代,再自上而下调整。调整时堆顶元素和左右子比较,若大于左右子则和左右子中较小的交换,直至叶子节点。

3.初始最小堆的建立过程

将一无序序列看成一个完全二叉树,则最后一个非终端结点是第?n/2?个元素,则从该元素开始自下向上逐步调整为小顶堆

数据结构与算法基础知识总结

数据结构与算法基础知识总结 1 算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。 基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。 算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。 算法复杂度:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量。 算法空间复杂度是指执行这个算法所需要的内存空间。 2 数据结构的基本基本概念 数据结构研究的三个方面: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; (2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。 数据结构是指相互有关联的数据元素的集合。 数据的逻辑结构包含: (1)表示数据元素的信息; (2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构条件:

(1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。 3 线性表及其顺序存储结构 线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。 在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。 非空线性表的结构特征: (1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件; (3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素的所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 ai的存储地址为:adr(ai)=adr(a1)+(i-1)k,,adr(a1)为第一个元素的地址,k代表每个元素占的字节数。 顺序表的运算:插入、删除。(详见14--16页) 4 栈和队列 栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。 栈按照“先进后出”(filo)或“后进先出”(lifo)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。 栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。 队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。rear指针指向队尾,front指针指向队头。 队列是“先进行出”(fifo)或“后进后出”(lilo)的线性表。 队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0表示队列空,s=1且front=rear表示队列满

数据结构整理完整版

第二章线性表 一、顺序表和链表的优缺点 1.顺序表 定义:用一组连续的存储单元(地址连续)依次存放线性表的各个数据元素。即:在顺序表中逻辑结构上相邻的数据元素,其物理位置也是相邻的。 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素(平均约需移动一半结点,当n很大时,算法的效率较低) 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充 2.链式存储结构 定义:由分别表示a1,a2,…,a i-1,a i,…,a n的N 个结点依次相链构成的链表,称为线性表的链式存储表示 优势: (1)能有效利用存储空间; 动态存储分配的结构,不需预先为线性表分配足够大的空间,而是向系统“随用随取”,在删除元素时可同时释放空间。 (2)用“指针”指示数据元素之间的后继关系,便于进行“插入”、“删除”等操作; 插入或删除时只需要修改指针,而不需要元素移动。 劣势: (1)不能随机存取数据元素; (2)丢失了一些顺序表的长处,如线性表的“表长”和数据元素在线性表中的 “位序”,在单链表中都看不见了。如,不便于在表尾插入元素,需遍历整个表才能找到插入的位置。 二、单链表中删除一个节点和插入一个节点的语句操作,p29 1.插入元素操作 算法基本思想:首先找到相应结点,然后修改相应指针。 假定在a,b之间插入结点X,s指向X, p指向a,指针修改语句为: s->next=p->next; p->next =s;

2.删除元素操作 算法基本思想:首先找到第i-1 个结点,然后修改相应指针。 删除b结点,其中,P指向a,指针修改语句为:p->next=p->next->next; 三、单链表的就地逆置习题集2.22 算法的基本思想:以单链表作存储结构进行就地逆置的正确做法应该是:将原链表的头结点和第一个元素结点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即令每个插入的结点成为新的第一个元素结点)。 算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。 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; } } 第三章栈和队列 一、栈和队列的特性 1.特点 栈必须按“后进先出”(LIFO)的规则进行操作,仅限在表尾进行插入和删除的操作。 队列(FIFO)必须按“先进先出”的规则进行操作,队尾插入,队头删除。 二、循环队列为空和满的判定方法,p63 队空条件:front == rear; 队满条件:(rear + 1) % maxSize == front

数据结构试题及答案(免费)

一、单选题(每题 2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C.正确性D.时空复杂度 2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结 点,则执行( )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3. 3.对线性表,在下列哪种情况下应当采用链表表示?( ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5. 5.AOV网是一种()。 A.有向图B.无向图C.无向无环图D.有向无环图 6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度()。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同D.高于二分查找 7.7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。 A.值B.函数C.指针D.引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具 有相同的()。 A.行号B.列号C.元素值D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为()。 A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A. O(n) B. O(1) C. O(log2n) D. O(n2) 二、二、运算题(每题 6 分,共24分) 1. 1.数据结构是指数据及其相互之间的______________。当结点之间存在M 对N(M:N)的联系时,称这种结构为_____________________。 2. 2.队列的插入操作是在队列的___尾______进行,删除操作是在队列的 ____首______进行。 3. 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则 表示栈满的条件是___top==0___(要超出才为满)_______________。 4. 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度 为_________,在表尾插入元素的时间复杂度为____________。

(完整版)非常实用的数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

数据结构复习提纲(整理)

复习提纲 第一章数据结构概述 基本概念与术语(P3) 1.数据结构是一门研究非数值计算程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科. 2.数据是用来描述现实世界的数字,字符,图像,声音,以及能够输入到计算机中并能被计算机识别的符号的集合 2.数据元素是数据的基本单位 3.数据对象相同性质的数据元素的集合 4.数据结构包括三方面内容:数据的逻辑结构.数据的存储结构.数据的操作. (1)数据的逻辑结构指数据元素之间固有的逻辑关系. (2)数据的存储结构指数据元素及其关系在计算机内的表示 ( 3 ) 数据的操作指在数据逻辑结构上定义的操作算法,如插入,删除等. 5.时间复杂度分析 -------------------------------------------------------------------------------------------------------------------- 1、名词解释:数据结构、二元组 2、根据数据元素之间关系的不同,数据的逻辑结构可以分为 集合、线性结构、树形结构和图状结构四种类型。 3、常见的数据存储结构一般有四种类型,它们分别是___顺序存储结构_____、___链式存储结构_____、___索引存储结构_____和___散列存储结构_____。 4、以下程序段的时间复杂度为___O(N2)_____。 int i,j,x; for(i=0;i=0)个具有相同性质的数据元素a1,a2,a3……,an组成的有穷序列 //顺序表结构 #define MAXSIZE 100 typedef int DataType; Typedef struct{ DataType items[MAXSIZE]; Int length; }Sqlist,*LinkList; //初始化链表 void InitList(LinkList *L){ (*L)=(LinkList)malloc(sizeof(LNode)); if(!L){ cout<<”初始化失败!”; return;

数据结构基础知识整理

数据结构基础知识整理 *名词解释1、数据:是信息的载体,能够被计算机识别、存储和加工处理。 *2、数据元素:是数据的基本单位,也称为元素、结点、顶点、记录。一个数据元素可 以由若干个数据项组成,数据项是具有独立含义的最小标识单位。 *3、数据结构:指的是数据及数据之间的相互关系,即数据的组织形式,它包括数据的 逻辑结构、数据的存储结构和数据的运算三个方面的内容。 *4、数据的逻辑结构:指数据元素之间的逻辑关系,即从逻辑关系上描述数据,它与数 据的存储无关,是独立于计算机的。 *5、数据的存储结构:指数据元素及其关系在计算机存储器内的表示。是数据的逻辑结 构用计算机语言的实现,是依赖于计算机语言的。 *6、线性结构:其逻辑特征为,若结构是非空集,则有且仅有一个开始结点和一个终端 结点,并且其余每个结点只有一个直接前趋和一个直接后继。 *7、非线性结构:其逻辑特征为一个结点可能有多个直接前趋和直接后继。 *8、算法:是任意一个良定义的计算过程,它以一个或多个值作为输入,并产生一个或 多个值作为输出;即一个算法是一系列将输入转换为输出的计算步骤。 *9、算法的时间复杂度T(n):是该算法的时间耗费,它是该算法所求解问题规模n趋向无穷大时,我们把时间复杂度T(n)的数量级(阶)称为算法的渐近时间复杂度。 *10、最坏和平均时间复杂度:由于算法中语句的频度不仅与问题规模n有关,还与输入实例等因素有关;这时可用最坏情况下时间复杂度作为算法的时间复杂度。而平均时间复杂度是指所有的输入实例均以等概率出现的情况下,算法的期望运行时间。 *11、数据的运算:指对数据施加的操作。数据的运算是定义在数据的逻辑结构上的,而 实现是要在存储结构上进行。 *12、线性表:由n(n≥0)个结点组成的有限序列。其逻辑特征反映了结点间一对一的关 系(一个结点对应一个直接后继,除终端结点外;或一个结点对应一个直接前趋,除开始结点外),这是一种线性结构。 *13、顺序表:顺序存储的线性表,它是一种随机存取结构。通过将相邻结点存放在相邻 物理位置上来反映结点间逻辑关系。 *14、单链表:每个结点有两个域:一个值域data;另一个指针域next,用来指向该结

数据结构复习要点整理版

第一章数据结构概述 基本概念与术语 1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。 2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。 (补充:一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。)3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。(有时候也叫做属性。) 4.数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 (1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。 数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。 依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种: 1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。 2.线性结构:结构中的数据元素之间存在“一对一“的关系。若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。 3.树形结构:结构中的数据元素之间存在“一对多“的关系。若数据为非空集,则除了第一个元素(根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。 4.图状结构:结构中的数据元素存在“多对多”的关系。若结构为非空集,折每个数据可有多个(或零个)直接后继。 (2)数据的存储结构:数据元素及其关系在计算机的表示称为数据的存储结构。 想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。逻辑结构可以映射为以下两种存储结构: 1.顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。 2.链式存储结构:借助指针表达数据元素之间的逻辑关系。不要求逻辑上相邻的数据元素物理位置上也相邻。 5.时间复杂度分析:1.常量阶:算法的时间复杂度与问题规模n无关系T(n)=O(1) 2.线性阶:算法的时间复杂度与问题规模n成线性关系T(n)=O(n) 3.平方阶和立方阶:一般为循环的嵌套,循环体最后条件为i++ 时间复杂度的大小比较: O(1)< O(log 2 n)< O(n )< O(n log 2 n)< O(n2)< O(n3)< O(2 n )

数据结构试题及答案

数据结构试题? 一、?单选题(每题 2 分,共20分) 1.1.???? 对一个算法的评价,不包括如下( B )方面的内容。 A.健壮性和可读性B.并行性 C.正确性 D.时空复杂度 2.2.???? 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点, 则执行( A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3.3.???? 对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4.4.???? 一个栈的输入序列为 1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5.5.???? AOV网是一种( D )。 A.有向图 B.无向图 C.无向无环图D.有向无环图 6.6.???? 采用开放定址法处理散列表的冲突时,其平均查找长度( B )。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同 D.高于二分查找 7.7.???? 若需要利用形参直接访问实参时,应将形参变量说明为( D )参数。 A.值 B.函数 C.指针 D.引用 8.8.???? 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有 相同的( A )。 A.行号B.列号 C.元素值 D.非零元素个数 9.9.???? 快速排序在最坏情况下的时间复杂度为( D )。 A.O(log 2n) B.O(nlog 2 n) C.O(n) D.O(n2) 10.10. 从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。 A. O(n) B. O(1) C. O(log 2 n) D. O(n2) 二、运算题(每题 6 分,共24分) 1. 1.?数据结构是指数据及其相互之间的_对应关系(联系)。当结点之间存在M对N(M: N)的联系时,称这种结构为图(或图结构)。 2. 2.队列的插入操作是在队列的__队尾___进行,删除操作是在队列的_对头_进行。 3. 3.??当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈 满的条件是_top==0__。 4. 4.???对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为

数据结构习题与答案

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构试题(含答案)

一.是非题 (正确的打“√”,错误的打“×”。) 1. 数据结构可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系, P是对D的基本操作集。× 2. 线性表的链式存储结构具有可直接存取表中任一元素的优点。× 3. 字符串是数据对象特定的线性表。 4. 二叉树是一棵结点的度最大为二的树。× 5.邻接多重表可以用以表示无向图,也可用以表示有向图。× 6.可从任意有向图中得到关于所有顶点的拓扑次序。× 7.一棵无向连通图的生成树是其极大的连通子图。× 8.二叉排序树的查找长度至多为log2n。× 9.对于一棵m阶的B-树.树中每个结点至多有m 个关键字。除根之外的所有非终端结点至少有┌m/2┐个关键字。× 10.对于目前所知的排序方法,快速排序具有最好的平均性能。 11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。× 12. 二维数组是其数据元素为线性表的线性表。 13. 连通图G的生成树是一个包含G的所有n个顶点和n-1条边的子图。× 14. 折半查找不适用于有序链表的查找。 15. 完全二叉树必定是平衡二叉树。 16. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。 17. 队列是与线性表完全不同的一种数据结构。× 18. 平均查找长度与记录的查找概率有关。 19. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。× 20. 算法的时间复杂性越好,可读性就越差;反之,算法的可读性越好,则时间复杂性就越差。× 二.选择题 1. 若对编号为1,2,3的列车车厢依次通过扳道栈进行调度,不能得到 ( e ) 的序列。 a:1,2,3 b:1,3,2 c:2,1,3 d:2,3,1 e:3,1,2 f:3,2,1 2. 递归程序可借助于( b )转化为非递归程序。 a:线性表 b: 栈 c:队列 d:数组 3. 在下列数据结构中( c )具有先进先出(FIFO)特性, ( b )具有先进后出(FILO)特性。 a:线性表 b:栈 c:队列 d:广义表 4. 对字符串s=’data-structure’ 执行操作replace(s,substring(s,6,8),’bas’)

数据结构试题及答案

第一章概论 一、选择题 1、研究数据结构就是研究(D)。 A. 数据的逻辑结构?B。数据的存储结构 C。数据的逻辑结构和存储结构?D.数据的逻辑结构、存储结构及其基本操作(研究非数值计算的程序设计问题中,计算机操作对象以及他们之间的关系和操作) 2、算法分析的两个主要方面是(A)。 A.空间复杂度和时间复杂度???B。正确性和简单性 C。可读性和文档性D.数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。(线性结构就是:在非空有限集合中,存在为一个被称为第一个的数据元素和最后一个元素,有除了第一个元素,集合中每一个元素均只有一个前驱,除了最后一个元素有唯一后继)(链表、栈、队列、数组、串) A. 图B. 树??C.广义表(线性表的推广) D.栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。 A.可执行性、可移植性和可扩充性? B. 可执行性、有穷性和确定性 C。确定性、有穷性和稳定性??? D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i

数据结构图习题

第七章图:习题 习题 一、选择题 1.设完全无向图的顶点个数为n,则该图有( )条边。 A. n-l B. n(n-l)/2 C.n(n+l)/2 D. n(n-l) 2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。 A.3 B.2 C.1 D.1/2 3.有向图的一个顶点的度为该顶点的( )。 A.入度 B. 出度 C.入度与出度之和 D.(入度+出度)/2 4.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。 A.强连通图 B.连通图 C.非连通图 D.非强连通图 5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。 A.上三角矩阵 B.稀疏矩阵 C.对角矩阵 D.对称矩阵 6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵 A.第i列元素之和 B.第i行元素之和减去第i列元素之和 C.第i行元素之和 D.第i行元素之和加上第i列元素之和 7.对于具有e条边的无向图,它的邻接表中有( )个边结点。 A.e-l B.e C.2(e-l) D. 2e 8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。 A. O(n2) B. O(n*e) C. O(n*logn) D.O(e) 9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( ) A.n B.n+l C.n-l D.n+e 10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。 A.最小 B.任何 C.广度优先 D.深度优先 二、填空题 1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。 2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。 3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。 4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。 5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。 6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。 7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。 8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。

十套数据结构试题与答案

数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 (一) (二) (三) (四) (五) (六) (七 )(八 ) (九 ) (十 ) 9 12 15 17 19 21 24 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 数据结构试卷 (一) (二) (三 ) (四 ) (五 ) (六) (七) (八) (九) (十 ) 27 28 29 31 33 35 37 38 39 40 数据结构试卷(一) 、单选题(每题 栈和队列的共同特点是(A ) 。 A. 只允许在端点处插入和删除元素 B. 都是先进后出 C. 都是先进先出 D. 没有共同点 用链接方式存储的队列,在进行插入运算时 (C ). 头、尾指针都要修改 头、尾指针可能都要修改 (D ) 线性表 2分,共20分) 1. 2. A. C. 3. A. 4. 仅修改头指针 B. 仅修改尾指针 D. 以下数据结构中哪一个是非线性结构? 队列 B.栈 C. 设有一个二维数组 A[m][ n],假设 个空间,问 676(10),每个元素占 制表示。 .688 D. 二叉树 A[2][2]存放位置在 (10)存放在什么位置?脚注(10)表示用10进 A[0][0] 存放位置在644(10), A[3][3] .678 C C ) 。 B. A 5.树最适合用来表示( A.有序数据元素 C.元素之间具有分支层次关系的数据 二叉树的第k 层的结点数最多为(D ). k .2 -1 B.2K+1 C.2K-1 若有18个元素的有序表存放在一维数组 6. A 7. 692 D . 696 D. 无序数据元素 乙间无联系的数 据 元素之 f k-1 D. 2 A[19]中,第一个元素放 A[1]中,现进行二 分查找,则查找 A : 3 ]的比较序列的下标依次为 (C ) A. 1 , 2, 3 B. 9 , 5, 2, 3 C. 9 , 5, 3 D. 9 , 4, 2, 3 对n 个记录的文件进行快速排序,所需要的辅助存储空间大致为 D. O 8. A. O (1) B. O (n ) C. O (1og 2n ) D. O (n2) 9. 对于线性表(7, 34, 55, 25, 64, 46, 20, 10)进行散列存储时,若选用 H (K ) =K %9作为散列函数,则散列地址为 1的元素有(D )个, A . 1 B . 2 C . 3 10. 设有6个结点的无向图,该图至少应有 ( A.5 B.6 C.7 D.8 二、填空题(每空 1分,共26分) 1.通常从四个方面评价算法的质量: _ 高效率 _______ 和―强壮性 _______ 。 1. 一个算法的时间复杂度为(n 3 +nlog 2n+14n)/ n 2 ,其数量级表示为 —o(n) ____________________ 。 2. 假定一棵树的广义表表示为 A (C, D (E , F , G , H( I , J )),则树中所含的结点数为 __________ 个,树的深度为 ____________ ,树的度为 ___________ 。 .4 条边才能确保是一个连通图。 正确性 易读性

数据结构名词解释整理

Data Structure 2015 hash table散列表:存放记录的数组 topological sort拓扑排序:将一个DAG中所有顶点在不违反前置依赖条件规定的基础上排成线性序列的过程称为拓扑排序(44) worst case 最差情况:从一个n元一维数组中找出一个给定的K,如果数组的最后一个元素是K,运行时间会相当长,因为要检查所有n 个元素,这是算法的最差情况(15) FIFO先进先出:队列元素只能从队尾插入,从队首删除(20)(P82)2014 growth rate增长率:算法的增长率是指当输入的值增长时,算法代价的增长速率(14) priority queue 优先队列:一些按照重要性或优先级来组织的对象成为优先队列(26) external sorting外排序:考虑到有一组记录因数量太大而无法存放到主存中的问题,由于记录必须驻留在外存中,因此这些排序方法称为外排序(32) connected component连通分量:无向图的最大连通子图称为连通分量(40) 2013 stack栈:是限定仅在一端进行插入或删除操作的线性表(19)

priority queue 优先队列:一些按照重要性或优先级来组织的对象成为优先队列(26) BFS广度优先搜索:在进一步深入访问其他顶点之前,检查起点的所有相邻顶点(42) collision (in hashing)冲突:对于一个散列函数h和两个关键码值k1和k2,如果h(k1) =β= h(k2) ,其中β是表中的一个槽,那么就说k1和k2对于β在散列函数h下有冲(35) Chapter 1 Data Structures and Algorithms type类型:是指一组值的集合 data type数据类型:一个类型和定义在这个类型上的一组操作abstract data type (ADT) 抽象数据类型:指数据结构作为一个软件构件的实现 data structure数据结构:是ADT的实现 problem问题:一个需要完成的任务,即对应一组输入,就有一组相应的输出 function函数:是输入和输出之间的一种映射关系 algorithm算法:是指解决问题的一种方法或者一个过程algorithm算法是解决问题的步骤,它必须把每一次输入转化为正确的输出;一个算法应该由一系列具体步骤组成,下一步应执行的步骤必须明确;一个算法必须由有限步组成;算法必须可以终止。computer program计算机程序:被认为是使用某种程序设计语言对一个算法的具体实现

数据结构试卷及答案压缩版

《数据结构》试卷及答案 1.算法分析的目的是( )。 A.找出数据结构的合理性 B.研究算法中输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2.()是具有相同特性数据元素的集合,是数据的子集。 A.数据符号 B.数据对象 C.数据 D.数据结构 3.用链表表示线性表的优点是( )。 A.便于随机存取 B.花费的存储空间比顺序表少 C.便于插入与删除 D.数据元素的物理顺序与逻辑顺序相同 4.输入序列为(A,B,C,D)不可能的输出有()。 A.(A,B,C,D) B. (D,C,B,A) C. (A,C,D,B) D . (C,A,B,D) 5.在数组表示的循环队列中,front、rear分别为队列的头、尾指针,maxSize为数组的最大长度,队满的条件是( )。 A. front=maxSize B. (rear+1)%maxSize=front C. rear=maxSize D. rear=front 6.设有串t='I am a good student ',那么Substr(t,6,6)=()。 A. student B. a good s C. good D. a good 7.设有一个对称矩阵A,采用压缩存储方式,以行序为主序存储a11为第一个元素,其存储地址为1,每个元素占一个地址空间,则a85地址为()。 A.23 B.33 C.18 D. 40 8.已知广义表LS=(A,(B,C,D),E)运用head和tail函数,取出LS中原子b的运算()。 A. Gethead(Gethead(LS)) B. Gettail(Gethead(LS)) C. Gethead(Gethead(Gettail(LS))) D. Gethead(Gettail(LS)) 9.若已知一棵二叉树先序序列为ABCDEFG,中序序列为CBDAEGF,则其后序序列为( ) A. CDBGFEA B. CDBFGEA C. CDBAGFE D. BCDAGFE 10.下列存储形式中,( ) 不是树的存储形式。 A.双亲表示法 B.左子女右兄弟表示法 C.广义表表示法 D.顺序表示法 11.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( )。 A.直接选择排序 B.直接插入排序 C.快速排序 D.起泡排序 12.采用折半查找方法进行查找,数据文件应为(),且限于()。

数据结构习题及答案

第一章 1.在数据结构中,从逻辑上可以把数据结构分为(C ) A.动态结构和静态结构 B. 紧凑结构和非紧凑结构 C.线性结构和非线性结构 D. 内部结构和外部结构 ● 2.在数据结构中,与所使用的计算机无关的是( A ) A. 逻辑结构 B. 存储结构 C. 逻辑和存储结构 D. 物理结构 3.下面程序的时间复杂度为____O(mn)_______。 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i 第二章线性表 ●链表不具备的特点是(A) A 可以随机访问任一结点(顺序) B 插入删除不需要移动元素 C 不必事先估计空间 D 所需空间与其长度成正比 2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B ) A head==null B head->next==null C head->next==head D head!=null ●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D) A 单链表 B 双链表 C 循环链表 D 顺序表 ● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C) A 顺序表 B 用头指针表示的单循环链表 C 用尾指针表示的单循环链表 D 单链表 ● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序, 则操作的时间复杂度为( D ) A O(1) B O(log2n) C O(n2) D O(n) ● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长 度有关 A 删除单链表中第一个元素 B 删除单链表中最后一个元素 C 在第一个元素之前插入一个新元素 D 在最后一个元素之后插入一个新元素 ●7.与单链表相比,双向链表的优点之一是(D) A 插入删除操作更简单 B 可以进行随机访问 C 可以省略表头指针或表尾指针 D 顺序访问相邻结点更容易 ●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域 (头结点的地址)中存放的是( B ) A list的地址 B list的内容 C list指的链结点的值 D 链表第一个链结点的地址 ●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B ) A list2比list1占用更多的存储单元 B list1与list2占用相同的存储单元 C list1和list2应该是相同类型的指针变量 D 双向链表比单链表占用更多的存储单元 10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。

数据结构考研知识点总结

数据结构考研真题及知识点解析 考察目标 1. 理解数据结构的基本概念、基本原理和基本方法。 2. 掌握数据的逻辑结构、存储结构及基本操作的实现,能够对算法进行基本的时间复杂度与空间复杂度的分析。 3. 能够运用数据结构的基本原理和方法进行问题的分析与求解,具备采用C、C++或Java语言设计与实现算法的能力。 第2章线性表 一、考研知识点 (一)线性表的定义和基本操作 (二)线性表的实现 1.顺序存储 2.链式存储 3.线性表的应用 二、考研真题 (一)选择题 近两年第2章没有考选择题,因为此章主要是线性表的操作,而且又是这门课的一个基础,考综合题的可能性比较大,而且可以和第3章、第9章和第10章的内容结合来出题。 1.(11年)设n是描述问题规模的非负整数,下面程序片段的时间复杂度是()。 x=2; while(xk时,指针p 随着每次遍历,也向前移动一个结点。当遍历完成时,p或者指向表头结点,或者指向链表中倒数第k个位置上的结点。 (3)算法描述:

相关主题
文本预览
相关文档 最新文档