数据结构与算法

数据结构与算法
数据结构与算法

模拟题一、

一单选题

1.数据结构在计算机内存中的表示是指( )。

A. 数据的逻辑结构

B. 数据结构

C. 数据的存储结构

D.数据元素

2. 数据的( )包括集合、线性结构、树形结构和图状结构四种基本类型。

A.逻辑结构和存储结构

B.存储结构

C.逻辑结构

D.物理结构

3. 通常所说的时间复杂度是指( )。

A. 语句的频度和

B. 算法的时间消耗

C. 最坏时间复杂度

D. 渐近时间复杂度

4.线性表的顺序存储结构是通过( )的方式表示元素之间的关系。

A. 后继元素地址

B. 元素的存储顺序

C. 左、右孩子地址

D. 后继元素的数组下标

5. 在顺序栈S中插入元素e时,执行( )。

A. S.top--; *S.top = e;

B. *S.top = e; S.top++;

C. *S.top = e; S.top--;

D. S.top++; *S.top = e;

6. 一个队列的入列序列是1,2,3,4,则队列的输出序列是( )。

A. 4,3,2,1

B. 1,4,3,2

C. 1,2,3,4

D. 3,2,4,1

7. 对于稀疏矩阵的压缩存储只需存储( )。

A. 所有元素

B. 对角线上的元素

C. 零元素

D. 非零元素

8. 对二叉树从1开始编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用( )。

A. 从根结点开始的层次遍历

B. 先序遍历

C. 中序遍历

D. 后序遍历

9. 按二叉树的定义,具有3个结点的二叉树一共有( )种。

A. 2

B. 3

C. 4

D. 5

10. 对于具有n个顶点和e条边的有向图,采用邻接表表示,则表头向量的大小为( )。

A. n

B. n+1

C. n-1

D. n+e

11. 连通图的生成树是( )。

A. 极小连通子图

B. 顶点间可以无路径

C. 连通子图

D. 边数为顶点数

12. 快速排序方法在( )情况下最不利于发挥其长处。

A. 被排序数据已基本有序

B. 被排序的数据量太大

C. 被排序数据数目为奇数

D. 被排序数据中含有多个相同值

二填空题

1. ________中任何两个结点之间没有逻辑关系。

2. 在线性表中,一个数据元素可由若干数据项组成,常将此种数据元素称为_______。

3. 在一个单链表中,若删除p所指结点的后继结点,则执行

____________________________________________________________。

4. 栈的表尾称为________。

5. 入队操作要修改________。

6. 广义表是数据元素的有限序列,其元素可以是单个元素,也可以是________。

7. 深度为5的满二叉树的结点数为________。

8. 具有3个结点的树有________种。

9. Prim算法适用于边数较________的图。

10. 遍历是指按某种搜索路径访问二叉树的每个结点,而且每个结点仅被访问______。

11. 对二叉排序树进行________遍历,可以得到该二叉树所有结点构成的有序序列。

12. 具有20个记录的序列,采用起泡排序最多的比较次数为________。

三问答题

1. 请用C语言给出顺序表的类型定义。

2. 数据结构形式定义为(D, S),其中D = { a,b,c,d,e },S = { R },R = {(a, b), (b, c), (c, d), (c, e), (d, e) },画出其逻辑结构图。

3. 举例说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其效率不同。

4. 将如下树转换成二叉树。

5. 若某非空二叉树的先序序列和后序序列正好相同,试说明二叉树的形态及原因。

6. 以关键字序列{12,2,16,9,10,8,20}为例,写出执行快速排序算法的各趟排序结束时,关键字序列的状态。

四算法题

1. 下面算法的功能是:在无头结点的线性单链表中插入元素结点,即在第i个位置之前插入新的数据元素e 。请在空缺处填入相应的语句。

Status ListInsert_L(LinkList &L, int i, ElemType e)

{//L是该链表的头指针

if(i==1)

{

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

(1)_________________________;

(2)_________________________;

}

else{ p=L;j=1;

while (p&&jnext; ++j;}

if(!p||j>i-1)return ERROR;

s=(LinkList)malloc(sizeof(LNode))

s->data=e;

(3)_______________________;

(4)_________________________;

}

return OK;

}

2. 试写出下面操作算法的功能。

void A(LinkList &La, SqList Lb) {

La=(LinkList)malloc(sizeof (LNode));

La->next=NULL;

p=La;

for (i=0; i<=Lb.length-1; i++){

q=(LinkList)malloc(sizeof(LNode));

q->data=Lb.elem[i];

p->next=q;

p=q;

}

q->next=NULL;

}

模拟题1答案

一单选题

1. C 4. B 6. C

7. D 10. A 12. A

二填空题

1. 集合

2.记录

5. 队尾指针

6. 广义表

7. 31

8. 2

9. 多或者稠密

12. 190

三问答题

1.

typedef struct{

ElemType *elem;

int length;

int listsize;

}SqList;

2.

3. 略

4.

5.

6.

[8,2,10,9] 12 [16,20]

[2] 8 [10,9] 12,16,20

2,8,9,10,12,16,20

四算法题

1.

(1) s->next=L;

(2) L=s;

(3) s->next=p->next;

(4) p->next=s;

2. 算法的功能是:建立一个带有头结点的单链表,链表中存储顺序表中的已有元素

《数据结构与算法》模拟题2

一、单选题

1.数据结构可形式地定义为(D, S),其中S是D上( )的有限集。

A

B

E C

F G D

A.操作

B.存储映像

C.关系

D.数据元素

2. 数据的最小单位是( )。

A. 数据结构

B. 数据元素

C. 数据项

D. 文件

3. 下列数据结构中( )是线性数据结构。

A. 二叉树

B. 无向图

C. 赫夫曼树

D.队列

4. 采用链式存储结构存储线性表的优点是( )。

A.便于随机存取

B. 花费的存储空间比顺序存储少

C.便于插入和删除操作

D. 数据元素的物理顺序与逻辑顺序相同

5. ( )不是队列的基本运算。

A. 判断一个队列是否为空

B. 从队头删除一个元素

C. 在队列第i个元素之后插入一个元素

D. 读取队头元素的值

6. 一个队列的入列序列是1,2,3,4,则队列的输出序列是( )。

A.4,3,2,1

B.3,2,4,1

C.1,4,3,2

D.1,2,3,4

7. 广义表((a), (b))的表尾是( )。

A.( )

B.b

C. ((b))

D. (b)

8. 若无向图中有n个结点,e条边,则它的邻接表需要( )个表结点。

A. n

B. 2n

C. 2e

D. e

9. 在哈希函数H(key) = key%m中,一般来说,m应取( )。

A. 奇数

B. 偶数

C. 充分大的数

D. 素数

10. 赫夫曼树的带权路径长度是( )。

A.所有叶结点带权路径长度之和

B.所有结点权值之和

C.带权结点的值

D.除根以外所有结点权值之和

11. 设一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当采用折半查找值为95的结点时,( )次比较后查找结束。

A.3

B.4

C.5

D.6

12. 在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )。

A. 直接插入排序

B. 快速排序

C. 冒泡排序

D. 简单选择排序

二、填空题

1. 在线性表中,一个数据元素可由若干数据项组成,在这种情况下,常将数据元素称为____________。

2. 在图形结构中,每个结点的前驱结点和后继结点可以有_______。

3. 从逻辑结构来看,线性结构的特点是____________。

4. 栈又称为________________的线性表。

5. 设有一个顺序栈S,元素a,b,c,d,e,f依次入栈,如果6个元素的出栈顺序为b,c,a,d,f,e,则顺序栈的容量至少为____。

6. 在队列中,可进行删除操作的一端称为________。

7. 对于稀疏矩阵的压缩存储只需存储_________________。

8. 邻接表是图的___________存储结构。

9. 在一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点为______个。

10. 有100个结点的树有________条边。

11. 对二叉排序树进行________遍历,可以得到该二叉树所有结点构成的有序序列。

12. 起泡排序、快速排序和插入排序中,不稳定的是________。

三、解答题

1. 请用C语言给出单链表(线性表的链式存储结构)的类型定义。

2. 设有多项式A(x) = 1 + 3x + 2x4,试用线性链表表示。

3. 设有一个二维数组A[10][20],采用以行序为主序的存储结构,每个元素占两个空间,第一个元素的存放位置为100(十进制),求元素A[6][8]的存放位置。

4. 将如下树转换成二叉树。

5. 哈希查找算法与其他查找方法对比有何特点?何谓冲突?请写出两种解决冲突方法的名称。

6. 设哈希表表长为11,哈希函数(用除留余数法)H(key) = key mod 11,解决冲突的方法为开放定址法Hi(key)=(H(key)+di)mod11,对下列关键字序列{19,13,33,02,16,24,7},给出计算过程并构造哈希表。

四、算法题

1.在长度大于1的带头结点的单链表中,p为指向待处理结点的指针,pre为指向最小值结点的前驱结点的指针。下面算法的功能是:删除最小值结点。请在空缺处填入相应的语句。

void Delete(LinkList &L)

{

p = L->next;

pre = L;

q=p;

while( (1)_______________)

{

if (p->next->data < q-> data)

{

(2)____________;

(3)____________;

}

(4)____________;

}

pre->next = q->next;

free(q);

}

2. 阅读如下算法,给出该算法的功能。void Unknown(LinkList &L, int n){

L=(LinkList)malloc(sizeof (LNode));

L->next=NULL;

s=L;

for (i = n; i>0;--i){

p =(LinkList)malloc(sizeof(LNode));

p->data=i;

s->next = p;

s = p;

}

s->next = NULL;

}

模拟题2参考答案

一、单选题

1. C 4. C 5. C

7. C 9. D 12. A

二、填空题

1. 记录

2. 多个

4. 后进先出

5. 2

7. 非零元素

8. 链式

11. 中序;

12. 快速排序

三、解答题

1.typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode, *LinkList;

3.

LOC(i,j)=LOC(0,0)+(b2*i+j)L

100+(20*6+8)*2=356

4.

5. 哈希查找算法不经过任何比较。

冲突:对不同的关键字得到相同的哈希地址,这种现象称为冲突。

开放定址法和链地址法

6.

0 1 2 3 4 5 6 7 8 9 10

四、算法题

1.

(1) p->next != NULL

(2) pre = p;

(3) q = p->next;

(4) p = p->next;

2.

算法的功能是:正位序(即从表头到表尾)建立一个带头结点的线性单链表。

《数据结构与算法》模拟题3

一、单选题

1. 计算机算法具有输入、输出和( )这五个特征。

A. 可行性、确定性和有穷性

B. 可行性、可移植性和可扩充性

C. 确定性、有穷性和稳定性

D. 易读性、稳定性和安全性

2. 线性表中的顺序存储结构是通过何种方式表示元素之间的关系( )。

A.后继元素地址

B.元素的存储顺序

C.左、右孩子地址

D.后继元素的数组下标

3. 最适合描述算法的语言是( )。

A.自然语言

B.计算机程序语言

C.介于自然语言和程序设计语言之间的伪语言

D.数学公式

4. 采用链式存储结构存储线性表的优点是( )。

A. 便于插入和删除操作

B. 便于随机存取

C.花费的存储空间比顺序存储少

D.数据元素的物理顺序与逻辑顺序相同

5. 在哈希函数H(key) = key%m中,一般来说,m应取( )。

A. 充分大的数

B. 素数

C. 奇数

D. 偶数

6. 在顺序栈中删除元素时,是( )。

A. 先删除元素,再移动栈顶指针

B. 不分先后,同时进行

C. 先移动栈顶指针,再删除元素

D. 谁先谁后都可以

7. 广义表((a), (b))的表尾是( )。

A. ((b))

B.b

C.(b)

D. ( )

8. 设有一个二维数组A[10][20],采用以行序为主序的存储结构,每个元素占两个空间,第一个元素的存放位置为100(十进制),则元素A[6][6]的存放位置为( )。

A.320(十进制)

B. 352 (十进制)

C.300(十进制)

D. 232 (十进制)

9. 常对数组进行的两种基本操作是( )。

A. 查找和插入

B. 插入和修改

C. 查找和修改

D.建立和删除

10. 已知某二叉树的先序遍历为A,B,D,C,E,则它可能的中序遍历序列为( )。

A.B,C,A,D,E

B.C,B,A,D,E

C.B,D,A,E,C

D.B,E,A,C,D

11. 下面关于图的存储的叙述中,( )是正确的。

A.用邻接表存储图,占用的存储空间数与图中结点个数有关,与边数无关

B.用邻接表存储图,占用的存储空间数与图中边数有关,与结点个数无关

C.用邻接矩阵法存储图,占用的存储空间数与图中结点个数有关,与边数无关

D.用邻接矩阵法存储图,占用的存储空间数与图中边数有关,与结点个数无关

12. 在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )。

A. 冒泡排序

B. 快速排序

C. 直接插入排序

D. 简单选择排序

二、填空题

1. 计算机算法具有输入、输出、可行性、有穷性和___________这五个特征。

2. 数据的基本单位是________________。

3. 在图形结构中,每个结点的前驱结点和后继结点可以有____________。

4. 在单链表中,头结点的作用是____________________________。

5. 队列具有____________的特点。

6. 二维数组的两种顺序存储结构分别为以行序为主序的方式和以________为主序的方式。

7. 对于稀疏矩阵的压缩存储只需存储_________________。

8. 广义表((a))的表尾是____。

9. 对于一个具有7个结点的二叉树,当它为一棵________二叉树时具有最小高度。

10. 设无向图G的顶点数为n,则G最少有________条边。

11. 对二叉排序树进行________遍历,可以得到该二叉树所有结点构成的有序序列。

12. 具有20个记录的序列,采用起泡排序最少的比较次数为_____。

三、解答题

1. 请用C语言给出顺序栈(栈的顺序存储结构)的类型定义。

2. 有字符串序列为“3*-ya/y”,试利用栈将字符串次序改为“3y-*ay/”,请写出操作步骤。(可用X代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的操作。例如:ABC变为BCA,则操作步骤为XXSXSS)。

3. 按行序为主序列出三维数组A[2][3][2]的所有元素在内存中的存储次序。

4. 用3,6,7,8,30作为叶子结点的值生成一棵赫夫曼树,并计算该树的带权路径长度。

5. 在一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数是多少。

6.以关键字序列{12,2,16,9,10,8,20}为例,分别写出执行以下排序算法的各趟排序结束时,关键字序列的状态。(1)直接插入排序(2)快速排序

四、算法题

1. 下面算法的功能是:建立一个带有头结点的单链表,链表中存储顺序表中的已有元素。请在空缺处填入相应的语句。

void A(LinkList &La, SqList Lb) {

La=(LinkList)malloc(sizeof (LNode));

La->next=NULL;

(1) ;

for (i=0; i<=Lb.length-1; i++){

q=(LinkList)malloc(sizeof(LNode));

q->data=Lb.elem[i];

(2) ;

(3) ;

}

(4) ;

}

2. 阅读如下算法,给出该算法的功能。

void unknow(Stack &S)

{// Q是一局部变量---队列

InitQueue(Q);

while(!StackEmpty(S))

{ i=Pop(S); EnQueue(Q,i); }

while(!QueueEmpty(Q))

{ i=DeQueue(Q); Push(S,i); } }

一、判断题

××√√

二、

ACDC CDCA DAAA

三、

1、记录

2、多个(任意)

3、略

4、后进先出/先进后出

5、2

6、略

7、非零元

8、链式

9、6

10、略

11、中序

12、快速排序

四、

1、

2、

3、

(6*20+8)*2+100=356 4、

5.

五、

1.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如f("abba")返回1,(1)char s[ ] (2)j++ (3)i >= j

2. 阅读如下算法,给出该算法的功能。

程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的元素放到栈顶。此栈中元素个数限制在64个以内。

一、判断题

1、记录是数据处理的最小单位。 ( )

2. 两维数组是一种非线性结构。( )

3. 在某棵二叉树的一种序列中,如果发现其中每一结点的左孩子均是其前趋,则可判断定这种序列为中序序列( )。

4. 前序遍历和后序遍历结果相同的二叉树为只有根结点的二叉树( )。

5. 在任一有向图中,所有顶点的入度之和一定等于所有顶点的出度之和( )。

二、单选题

1. 若要求能快速地实现在链表的末尾插入结点和删除第一个结点的运算,则选择( )最合适。

A) 单链表 B) 带尾指针的单循环链表 C) 双链表 D) 双循环链表

2.利用n个值生成的哈夫曼树中共有()个结点。

A.n

B.n+1

C.2n

D.2n-1

3.在各种排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( )。

A)希尔排序 B)冒泡排序 C)插入排序 D)选择排序

4.一个栈的入栈序列是a,b,c,d, 则下列序列中不可能的输出序列是( )。

A)acbd B)dcba C)acdb D)dbac

5. ( )不是队列的基本运算。

A. 判断一个队列是否为空

B. 从队头删除一个元素

C. 在队列第i个元素之后插入一个元素

D. 读取队头元素的值

6. 一个队列的入列序列是1,2,3,4,则队列的输出序列是( )。

A.4,3,2,1

B.3,2,4,1

C.1,4,3,2

D.1,2,3,4

7. 广义表((a), (b))的表尾是( )。

A.( )

B.b

C. ((b))

D. (b)

8. 若无向图中有n个结点,e条边,则它的邻接表需要( )个表结点。

A. n

B. 2n

C. 2e

D. e

9. 常对数组进行的两种基本操作是( )。

A. 查找和插入

B. 插入和修改

C. 查找和修改

D.建立和删除

10. 已知某二叉树的先序遍历为A,B,D,C,E,则它可能的中序遍历序列为( )。

A.B,C,A,D,E

B.C,B,A,D,E

C.B,D,A,E,C

D.B,E,A,C,D

11. 下面关于图的存储的叙述中,( )是正确的。

A.用邻接表存储图,占用的存储空间数与图中结点个数有关,与边数无关

B.用邻接表存储图,占用的存储空间数与图中边数有关,与结点个数无关

C.用邻接矩阵法存储图,占用的存储空间数与图中结点个数有关,与边数无关

D.用邻接矩阵法存储图,占用的存储空间数与图中边数有关,与结点个数无关

12. 在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是( )。

A. 冒泡排序

B. 快速排序

C. 直接插入排序

D. 简单选择排序

三、填空题

1.数据的逻辑结构可分为____和____两大类。

2.数据的存储结构被分为____,_____,_____和____4种。

3.在下面的程序段中,s=s+p语句被执行次数为____,p*=j语句的执行次数为____,该程序的复杂度为____。

int i=0,s=0;

while(++i<=n)

{ int p=1;

for(int j=1;j<=i;j++)

p*=j;

s=s+p;

}

4.一种数据结构的元素集合K和它的二元关系R为:K={a,b,c,d,e,f,g,h}

R={}

则该数据结构具有____结构。

5.线性表的两种存储结构分别为____和____。

6.栈又称为________________的线性表。

四、解答题

1.简述线性结构,树形结构,网状结构的不同。

2.简述算法复杂度的评价方法。

3.设有两个算法在同一台机器上运行,其执行时间分别为100n2和2n,要使前者快于后者,n至少为多大,

4.在顺序表中插入和删除一个结点需平均移动多少个结点,具体移动的次数取决于哪些因素,

5、在单链表,双向链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将p从相应的链表中删去,若可以,其时间复杂度分别为多少,

四、算法题

1. 下面算法的功能是:设计一个算法,统计出二叉树中等于给定值x的结点个数,该统计值由变量k带回(k的初值为0)。请填空完成该程序。

void count1(bitreptr r,datatype x,int &k)

{

if ((1)______________)

{

if(r—>data==x) (2)______________;

count1(r—>lchild,x,k);

count1(r—>rchild,x,k);

}

}

2. 阅读如下算法,给出该算法的功能。

int SquareSum(int n)

{ if(n==0)return 0;

else return n*n+Square(n-1);

}

《数据结构与算法》模拟题五

一、判断题

×××√√

二、单选题(共12题,共24分)

1. B

2. D 5. C 6. D 9.D 2.C

三、填空题

1.线形;非线形

2.顺序;链式;索引;散列存储结构

5.顺序;链式

6.后进先出

四、解答题

五、算法题

1.(1) r!=NULL;(2)k++;

2. 计算出返回1至n之间的所有整数平方和

数据结构与算法--树的应用

实验报告 课程名称:数据结构与算法 实验名称:树的应用 一、实验目的 ⑴、掌握二叉树的静态数组存放。 ⑵、掌握哈夫曼编码的基本概念。 ⑶、掌握哈夫曼编码树的构造方法。 ⑷、掌握哈夫曼编码的构造和使用。 ⑸、理解前缀编码的概念。 二、实验内容 ⑴、按照字符出现概率构造一个哈夫曼树。要求输入为一个文本文件(可以限 制文本仅仅包含字母),通过统计字符出现的次数计算概率,在此基础上构造哈夫曼树。 ⑵、打印出每一个字母对应的哈夫曼编码。 三、实验环境 硬件:Windows XP计算机、鼠标、键盘、显示器 开发环境:Microsoft Visual C++ 6.0 四、实验步骤 ①、点击开始菜单中的程序-Microsoft Visual C++ 6.0 点击菜单栏中的文件—新建—文件—C++ Source File ,在文件名(N)中写入5.cpp,再点击确定. ②、编写程序如下: #include #define MAXV ALUE 10000//定义最大权值 #define MAXLEAF 100//定义哈夫曼树中最大叶子节点个数 #define MAXNODE MAXLEAF*2-1//哈夫曼树的最大节点数 #define MAXBIT 30//定义哈夫曼编码的最大长度 #define MAX 100 typedef struct { int weight; int parent,lchild,rchild; }HufNodeType; typedef struct { int bit[MAXBIT]; int start;//编码的起位 }HufCodeType;//哈夫曼编码的结构体 void HuffmanTree(HufNodeType HuffNode[],int *w,int n)//建立哈夫曼树

数据结构与算法设计实验

《数据结构与算法设计》 实验报告 ——实验二 学院:自动化学院 班级: 学号: : 一、实验目的

按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。 二、实验容 简单计算器。 请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。要求: ①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 ②输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取 整。 例如,输入:4+2*5= 输出:14 输入:(4+2)*(2-10)= 输出:-48 三、程序设计 概要设计 1、宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 2、基本函数: (1)void InitStack_char(SqStack *S) //char型栈初始化 (2)void InitStack_int(sqStack *S) //int型栈初始化 (3)void Push_char(SqStack *S,char ch) //char型元素进栈 (4)void Push_int(sqStack *S,int num) //int型元素进栈 (5)char GetTop_char(SqStack *S) //取char型栈顶元素 (6)int GetTop_int(sqStack *S) //取int型栈顶元素 (7)Status In(char c) //判断是否为运算符,若是运算符则返回,否则返回 (8)char Precede(char a,char b) //判断两运算符的先后次序 (9)Status Pop_char(SqStack *S,char &x) //char型栈出栈 (10)Status Pop_int(sqStack *S,int &x) //int型栈出栈 (11)int Operate(int a,char theta,int b) //计算a和b运算结果 3、流程图

数据结构与算法C语言版期末复习题

《数据结构与算法》期末复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

《数据结构与算法》课后习题答案

2.3 课后习题解答 2.3.2 判断题 1.线性表的逻辑顺序与存储顺序总是一致的。(×) 2.顺序存储的线性表可以按序号随机存取。(√) 3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。(×) 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√) 5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。(×) 6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)7.线性表的链式存储结构优于顺序存储结构。(×) 8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√) 9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(×) 11.静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。(×) 12.线性表的特点是每个元素都有一个前驱和一个后继。(×) 2.3.3 算法设计题 1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。 int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/ else {i=*elenum; while (i>=0 && A[i]>x) /*边找位置边移动*/ {A[i+1]=A[i]; i--; } A[i+1]=x; /*找到的位置是插入位的下一位*/ (*elenum)++; return 1; /*插入成功*/ } } 时间复杂度为O(n)。

武汉理工大学数据结构与算法综合实验哈夫曼树(1)

学生学号Xxx实验课成绩 学生实验报告书 实验课程名称数据结构与算法综合实验 开课学院计算机科学与技术学院 指导教师姓名xxx 学生姓名xxx 学生专业班级xxxx 2015--2016学年第2学期

实验课程名称:数据结构与算法综合实验 实验项目名称二叉树与赫夫曼图片压缩报告成绩 实验者xx专业班级xxx组别 同组者完成日期2016年5月 2日第一部分:实验分析与设计(可加页) 一、实验目的和要求 1.目的 掌握树的存储结构 掌握二叉树的三种遍历方法 掌握 Huffman树、Huffman编码等知识和应用 使用 C++、文件操作和 Huffman算法实现“图片压缩程序”专题编程。 2.要求 针对一幅 BMP 格式的图片文件,统计 256 种不同字节的重复次数,以每种字 节重复次数作为权值,构造一颗有 256 个叶子节点的哈夫曼二叉树。 利用上述哈夫曼树产生的哈夫曼编码对图片文件进行压缩。 压缩后的文件与原图片文件同名,加上后缀.huf (保留原后缀),如 pic.bmp 压 缩后 pic.bmp.huf 二、分析与设计 依据上述的实验目的与要求,可导出实现的二叉树与赫夫曼图片压缩软件的流程为: ① 读取图片文件、统计权值 ②生成 Huffman树 ③生成 Huffman编码 ④ 压缩图片文件 ⑤ 保存压缩的文件 1.数据结构的设计 记录统计 256种不同字节的重复次数使用整型数组。 int weight[256] = { 0 }; 二叉树的存储结构。使用结构体存储节点,使用数组存储树的节点,使用静态二叉链表方 式存储二叉树。 Huffman编码存储结构 struct HTNode { int weight;//权值

数据结构与算法知识点必备

数据结构与方法 1、算法的基本特征:可行性、确定性、有穷性、拥有足够的情报 2、算法的基本运算与操作:算术运算、逻辑运算、关系运算、数据传输 3、算法的基本控制结构:顺序结构、选择结构、循环(重复)结构 4、算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法 5、算法的复杂度主要包括:时间复杂度、空间复杂度 6、算法的时间复杂度:指执行算法所需要的计算工作量 7、算法的空间复杂度:指执行这个算法所需要的内存空间 8、数据结构主要研究:数据的逻辑结构、数据的存储结构、对各种数据结构进行的运算 9、数据结构研究的目的:提高数据处理的效率 10、数据处理的效率:数据处理的速度、减少处理过程中占用计算机的存储空间 11、数据处理:指对数据集合中的各元素以各种方式进行运算 12、数据元素:指在数据处理中,每一个需要处理的对象都可以抽象成数据元素 13、数据结构:指反映数据元素之间关系的数据元素集合的表示 14、数据的逻辑结构:指反映数据元素之间逻辑关系的数据结构,两要素:数据元素的集合、数据元素在集合上的关系 15、数据的存储结构:指数据的逻辑结构在计算机存储空间的存放形式,常用的存储结构有:顺序、链接、索引等 16、数据结构的图形表示中每个元素加上方框成为结点 17、数据结构一般分为:线性结构、非线性结构 18、线性结构满足:有且仅有一个根结点、每个结点最多有一个前件与后件、在一个线性结构中插入与删除任何一个结点后还就是线性结构 19、线性表定义:线性表就是由n个数据元素a1、a2、a3、a4……an组成的一个有限序列,表中每一个数据元素,除了第一个外,有且仅有一个前件,除了最后一个外,有且仅有一个后件20、非线性表的特征:有且只有一个根节点a1,它无前件、有且只有一个终结点an,它无后件、除了第一个与最后一个外,其她所有结点只有一个前件与一个后件 21、线性表的长度:线性表中的结点的个数n成为线性表的长度,当n=0时,成为空表 22、线性表的顺序存储的特点:所有元素所占的存储空间就是连续的、各数据元素在存储空间中就是按逻辑顺序一次存放的 23、线性表的随机存取地址计算公式:ADD(ai)=ADD(a1)+(i-1)*k 24、线性表的主要操作:插入、删除、查找、排序、分解、合并、复制、逆转 25、栈的定义:栈就是限定在一端进行插入与删除的线性表,它按照“先进后出,后进先出”的原则组织数据 26、栈的顺序存储:在程序设计语言中,一般一维数组S(1:m)作为栈的顺序存储空间,其中m 为栈的最大容量 27、栈的基本运算:入栈、退栈、读栈顶元素 28、入栈运算:首先将栈顶指针(top)加1,然后将新元素插入到栈顶指针指向的位置。当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,称为“上溢”错误 29、退栈运算:首先将栈顶元素赋给一个指定的变量,然后将栈顶指针(top)减1。当栈顶指针为0时,说明栈空,成为“下溢”错误 30、队列的定义:队列就是指允许在一端进行插入,而在另一端进行删除的线性表,它按照“先进先出”的原则组织数据 31、循环队列:在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列,

824数据结构与算法设计A

西安科技大学 2013年硕士研究生入学考试试题A ───────────────────────────────── 科目编号:824 科目名称: 数据结构与算法设计 考生须知: 1、 答案必须写在答题纸上,写在试题或草稿纸上不给分。 2、 答题须用蓝、黑色钢笔或圆珠笔,用铅笔、红色笔者不给分。 3、 答题必须写清题号,字迹要清楚,卷面要保持整洁。 4、 试题要随答题纸一起交回。 一、单项选择题(每小题2分,共30分) (1)并归排序的时间复杂度是( )。 A .O(n 2) B .O(nlog 2n) C .O(n) D .O(log 2n) (2)设一个链表最常用的操作是在末尾插入结点和删除尾结点,选用( )存储结构最节省时间。 A .单链表 B .单循环链表 C .带尾指针的单循环链表 D .带头结点的双循环链表 (3)散列文件是一种( )。 A .顺序文件 B .索引文件 C .链接文件 D .计算机寻址文件 (4)常用于函数调用的数据结构是( )。 A .栈 B .队列 C .数组 D .链表 (5)两个矩阵sn ms B A ,相乘的时间复杂度是( )。 A .O(n 2) B .O(s 2) C .O(msn) D .O(mn) (6)图的广度优先搜索遍历使用的数据结构是( )。 A .栈 B .队列 C .集合 D .树 (7)在单链表中,每个存贮结点有两个域,即数据域和指针域,指针域指向该结点的( )。 A .直接前驱 B .直接后继 C .开始结点 D .终端结点 (8)在已知头指针的单链表中,要在其尾部插入一个新结点,其时间复杂度是( )。 A .O(n 2) B .O(1) C .O(n) D .O(log 2n) (9)在链队列中执行入队操作,( )。 A .需判断队是否为空 B .限定在链表头p 进行 C .需判断队是否为满 D .限定在链表尾p 进行 (10)对序列(95,83,62,70)进行冒泡排序(由小到大),第2趟排序后的结果为( )。 A .(70,83,62,95) B .(70,62,83,95)

计算机学院数据结构与算法分析期末试题(2007级B)_无答案

四川大学期末考试试题 (2008-2009学年第1学期) 课程号:课程名称:数据结构与算法分析(B卷)任课教师: 1.数据类型为()。 A)数据项的集合B)值的集合及定义在其上的一组操作的总称 C)数据元素的集合D)关键字的集合 2.链表不具有的特点是()。 A)可随机直接访问任一元素B)插入删除不需要移动元素 C)不必事先估计元素个数D)所需空间与线性表长度成正比 3.设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。 A)ABCD B)DCBA C)ABCD D)DABC 4.将对称矩阵A nxn压缩存储在一维数组B[m]中,则m的值至少为()。 A)n(n+1)/2 B)n(n-1)/2 C)n(n+1) D)n2 5.设二叉树中有n2个度为2的结点,n1个度为1的结点,n0个叶子结点,则此二叉树中空指针域个数为()。 A)n0+n1+n2 B)n2+n1+2n0 C)2n2+n1D)2n0+n1 6.对于具有n个顶点的强连图,其弧条数的最小值为()。 A)n+1 B)n C)n-1 D)n-2 7.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。 A)2k-1-1 B)2k-1C)2k-1+1 D)2k-1 8.归并排序的时间复杂度是()。 A)O(1) B)O(n) C)O(n2) D)O(nlogn) 9.每一趟都能选出一个元素放在其最终位置上,并且不稳定的排序算法是()。 A)冒泡排序B)简单选择排序C)希尔排序D)直接插入排序10.按照二叉树的定义,具有3个结点的不同形态(相似)的二叉树有()种。 A)3 B)4 C)5 D)6 二、(本题10分) 利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算,请简述算法思想。 三、(本题10分) 已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。 先序序列:ABCDEFGH IJ 中序序列:CBEDAGHFJI 注:试题字迹务必清晰,书写工整。本题2页,本页为第1页 教务处试题编号:

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

数据结构与算法基础知识总结 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表示队列满

数据结构树的有关算法

《数据结构》课程设计任务书 学期:11-12-2 班级:网络10 一、设计目的 《数据结构》是一门实践性较强的专业基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。 二、设计要求 1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。 3、本次课程设计按照教学要求需要在一周半时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。 4、编程语言任选。 三、设计选题 题一:线索二叉树(**) 任务: 1.建立中序线索二叉树,并且中序遍历; 2.求中序线索二叉树上已知结点中序的前驱和后继; 需求分析和概要设计: 建立中序线索二叉树,并且中序遍历。首先就是要建立树,再将树中序线索化。求中序线索二叉树上已知结点中序的前驱和后继时,即是将树在遍历一遍。也可以在遍历的过程中,将树的结点放在数组中,当然必须讲述先遍历一遍,这是用空间来换时间。 详细设计: 树的结构体的声明: typedef char TElemtype; typedef enum PointerTag{Link,Thread}; //设置标志:Link为指针,Thread为线索typedef struct BiThrNode{ //树结点结构体 TElemtype data; struct BiThrNode *lchild,*rchild; PointerTag LTag,RTag; }BiThrNode,*BiThrTree; 相关函数的声明:

数据结构与算法第二版2-4章答案

2.3 课后习题解答 选择题 1、A 2、A 3、D 4、C 5、D 6、B 7、C 8、B 9、A 10、D 11、B 12、D 2.3.2 判断题 1.线性表的逻辑顺序与存储顺序总是一致的。(×) 2.顺序存储的线性表可以按序号随机存取。(√) 3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。(×) 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。(√) 5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。(×) 6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(√)7.线性表的链式存储结构优于顺序存储结构。(×) 8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。(√) 9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(×) 11.静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。(×) 12.线性表的特点是每个元素都有一个前驱和一个后继。(×) 2.3.3 算法设计题 1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。 int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/ else {i=*elenum; while (i>=0 && A[i]>x) /*边找位置边移动*/ {A[i+1]=A[i]; i--; } A[i+1]=x; /*找到的位置是插入位的下一位*/ (*elenum)++; return 1; /*插入成功*/ }

北京交通大学数据结构与算法期末测验考试参考答案

北京交通大学考试试题(A卷) 课程名称:数据结构与算法2011-2012学年第一学期出题教师:张勇 (请考生注意:(1)本试卷共有六道大题,(2)答案一律写在答题纸上,(3)试卷不得带出考场) 1. 在顺序表中访问任意一个元素的时间复杂度均为,因此顺序表也称为 的数据结构。 2.三维数组a[4][3][2](下标从0开始),假设a[0][0][0]的地址为50,数据以行序优先方式存储,每个元素的长度为2字节,则a[2][1][1]的地址是。 3. 直接插入排序用监视哨的作用是。 4. 已知广义表Ls=(a, (b, c), (d, e)), 运用head和tail函数取出Ls中的原子d的运算 是。 5.对有14个元素的有序表A[1..14]进行折半查找,当比较到A[4]时算法结束。被比较元素除A[4]外,还有。 6. 在AOV网中,顶点表示,边表示。 7. 有向图G可进行拓扑排序的判别条件是。 8. 若串S1=‘ABCDEFGHIJK’,S2=‘451223’,S3=‘####’,则执行 Substring(S1,Strlength(S3),Index(S2,‘12’,1))的结果是。 二、选择题(每空2分,共20分) 1.在下列存储形式中,哪一个不是树的存储形式?() A.双亲表示法B.孩子链表表示法 C.孩子兄弟表示法D.顺序存储表示法 2.查找n个元素的有序表时,最有效的查找方法是()。 A.顺序查找B.分块查找 C.折半查找D.二叉查找 3.将所示的s所指结点加到p所指结点之后,其语句应为()。 p (A) s->next=p+1 ; p->next=s;

(B) (*p).next=s; (*s).next=(*p).next; (C) s->next=p->next ; p->next=s->next; (D) s->next=p->next ; p->next=s; 4. 在有向图的邻接表存储结构中,顶点v 在链表中出现的次数是( )。 A. 顶点v 的度 B. 顶点v 的出度 C. 顶点v 的入度 D. 依附于顶点v 的边数 5. 算法的时间复杂度为O (nlog 2n )、空间复杂度为O(1)的排序算法是( )。 A. 堆排序 B. 快速排序 C. 归并排序 D.直接选择 6. 设矩阵A 是一个对称矩阵,为了节省存储,将其 下三角部分(如右图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i ≤j), 在一维数组B 中下标k 的值是( ): A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 7. 由一个长度为11的有序表,按二分查找法对该表进行查找,在表内各元素等概率情 况下,查找成功的平均查找长度是( )。 A .29/11 B. 31/11 C. 33/11 D.35/11 8. AVL 树是一种平衡的二叉排序树,树中任一结点的( )。 A. 左、右子树的高度均相同 B. 左、右子树高度差的绝对值不超过1 C. 左子树的高度均大于右子树的高度 D. 左子树的高度均小于右子树的高度 9. 下列四种排序方法中,不稳定的方法是( )。 A. 直接插入排序 B. 冒泡排序 C. 归并排序 D. 堆排序 10. 设树的度为4,其中度为1,2,3,4的结点个数分别为4, 2, ,1, 1, 则T 中的叶子数为 ( )。 A .5 B .6 C .7 D .8 三、 判断题(10分,每小题1分) 1. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( ) 2. 数组不适合作任何二叉树的存储结构。( ) 3. 广义表的取表尾运算,其结果通常是个表,但有时也可是个原子。( ) 4. 在含有n 个结点的树中,边数只能是n-1条。( ) 5. 所谓一个排序算法是否稳定,是指该算法在各种情况下的效率是否相差不大。( ) 6. 简单选择排序在最好情况下的时间复杂度为O(n)。( ) 7. 在二叉排序树中插入一个新结点,总是插入到叶结点下面。( ) 8. 采用线性探测处理冲突,当从哈希表中删除一个记录时,不应将该记录所在位置置 空,因为这会影响以后的查找。( ) 9. 有n 个数存放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无 ?????? ? ???? ? ??=n n n n a a a a a a A ,2,1,2 ,21,21 ,1Λ Λ

二叉排序树运算-数据结构与算法课程设计报告_l

合肥学院 计算机科学与技术系 课程设计报告 2009 ~2010 学年第二学期 课程 数据结构与算法 课程设计 名称 二叉排序树运算学生姓名顾成方 学号0704011033 专业班级08计科(2) 指导教师王昆仑张贯虹 2010 年 5 月

题目:(二叉排序树运算问题)设计程序完成如下要求:对一组数据构造二叉排序树,并在二叉排序树中实现多种方式的查找。基本任务:⑴选择合适的储存结构构造二叉排序树;⑵对二叉排序树T作中序遍历,输出结果;⑶在二叉排序树中实现多种方式的查找,并给出二叉排序树中插入和删除的操作。 ⑷尽量给出“顺序和链式”两种不同结构下的操作,并比较。 一、问题分析和任务定义 本次程序需要完成如下要求:首先输入任一组数据,使之构造成二叉排序树,并对其作中序遍历,然后输出遍历后的数据序列;其次,该二叉排序树能实现对数据(即二叉排序树的结点)的查找、插入和删除等基本操作。 实现本程序需要解决以下几个问题: 1、如何构造二叉排序树。 2、如何通过中序遍历输出二叉排序树。 3、如何实现多种查找。 4、如何实现插入删除等操作。 二叉排序树的定义:

⑴其左子树非空,则左子树上所有结点的值均小于根结点的值。 ⑵若其右子树非空,则右子树上所有结点的值大于根结点的值。 ⑶其左右子树也分别为二叉排序树。 本问题的关键在于对于二叉排序树的构造。根据上述二叉排序树二叉排序树的生成需要通过插入算法来实现:输入(插入)的第一个数据即为根结点;继续插入,当插入的新结点的关键值小于根结点的值时就作为左孩子,当插入的新结点的关键值大于根结点的值时就作为右孩子;在左右子树中插入方法与整个二叉排序树相同。当二叉排序树建立完成后,要插入新的数据时,要先判断已建立的二叉排序树序列中是否已有当前插入数据。因此,插入算法还要包括对数据的查找判断过程。 本问题的难点在于二叉排序树的删除算法的实现。删除前,首先要进行查找,判断给出的结点是否已存在于二叉排序树之中;在删除时,为了保证删除结点后的二叉树仍为二叉排序树,要考虑各种情况,选择正确

天津科技大学数据结构与算法课程设计

《数据结构与算法分析》课程设计教学任务书 一、课程设计的目的 数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。 学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的: 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 二、课程设计的基本要求 1. 独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。 2. 做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。 3. 按照课程设计的具体要求建立功能模块,每个模块要求按照如下几个内容认真完成: a)需求分析: 在该部分中叙述,每个模块的功能要求 b)概要设计: 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义) c)详细设计: 各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组程序,每个功能模块采用不同的函数实现) 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释 d)调试分析: 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些,问题如何解决?),算法的改进设想 课程设计总结:(保存在word文档中)总结可以包括:课程设计过程的收获、遇到的问题、解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容 4. 实现的结果必须进行检查和演示,程序源代码和程序的说明文件必须上交,作为考核内容的一部分。(上交时每人交一份,文件夹的取名规则为:“学号姓名”,如“09201199王五”。该文件夹下至少包括:“源代码”、“课程设计报告”、“可执行文件”。由学习委员收

数据结构与算法试题

数据结构与算法试题 一、单选题 1、在数据结构的讨论中把数据结构从逻辑上分为 (C ) A 内部结构与外部结构 B 静态结构与动态结构 C 线性结构与非线性结构 D 紧凑结构与非紧凑结构。 2、采用线性链表表示一个向量时,要求占用的存储空间地址(D ) A 必须就是连续的 B 部分地址必须就是连续的 C 一定就是不连续的 D 可连续可不连续 3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为( D )。 A n B n/2 C (n-1)/2 D (n+1)/2 4、在一个单链表中,若q结点就是p结点的前驱结点,若在q与p之间插入结点s,则执行( D )。 A s→link = p→link;p→link = s; B p→link = s; s→link = q; C p→link = s→link;s→link = p; D q→link = s;s→link = p; 5、如果想在4092个数据中只需要选择其中最小的5个,采用( C )方法最好。 A 起泡排序 B 堆排序 C 锦标赛排序 D 快速排序 6、设有两个串t与p,求p在t中首次出现的位置的运算叫做( B )。 A 求子串 B 模式匹配 C 串替换 D 串连接 7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数

组至少需要的存储字数就是( C )。 A 80 B 100 C 240 D 270 8、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。 A 栈 B 队列 C 循环队列 D 优先队列 9、一个队列的进队列顺序就是1, 2, 3, 4,则出队列顺序为( C )。 10、在循环队列中用数组A[0、、m-1] 存放队列元素,其队头与队尾指针分别为front与rear,则当前队列中的元素个数就是( D )。 A ( front - rear + 1) % m B ( rear - front + 1) % m C ( front - rear + m) % m D ( rear - front + m) % m 11、一个数组元素a[i]与( A )的表示等价。 A *(a+i) B a+i C *a+i D &a+i 12、若需要利用形参直接访问实参,则应把形参变量说明为( B )参数。 A 指针 B 引用 C 值 D 变量 13、下面程序段的时间复杂度为( C ) for (int i=0;i

数据结构与算法设计知识点

数据结构与算法设计知识点 试题类型: 本课程为考试科目(闭卷笔试),试题类型包括:概念填空题(10 %),是非判断题(10 %),单项选择题(40 %),算法填空题(10%),算法应用题(20 %),算法设计题(10 %)。 第一章绪论 重点内容及要求: 1、了解与数据结构相关的概念(集合、数据、数据元素、数据项、关键字、元 素之间的关系等)。 数据:所有能被输入到计算机中,且能被计算机处理的符号的 集合。是计算机操作的对象的总称。是计算机处理的信息的某种特定 的符号表示形式。 数据元素:是数据(集合)中的一个“个体”,数据结构中的基本 单位,在计算机程序中通常作为一个整体来考虑和处理。 数据项:是数据结构中讨论的最小单位,数据元素可以是一个或 多个数据项的组合 关键码:也叫关键字(Key),是数据元素中能起标识作用的数 据项。 其中能起到唯一标识作用的关键码称为主关键码(简称主码); 否则称为次关键码。通常,一个数据元素只有一个主码,但可以有多 个次码。 关系:指一个数据集合中数据元素之间的某种相关性。 数据结构:带“结构”的数据元素的集合。这里的结构指元素之 间存在的关系。 数据类型:是一个值的集合和定义在此集合上的一组操作的总

称。 2、掌握数据结构的基本概念、数据的逻辑结构(四种)和物理结构(数据元素 的表示与关系的表示、两类存储结构:顺序存储结构和链式存储结构)。 数据结构包括逻辑结构和物理结构两个层次。 数据的逻辑结构:是对数据元素之间存在的逻辑关系的一种抽象的描述,可以用一个数据元素的集合和定义在此集合上的若干关系来表示 逻辑结构有四种:线性结构、树形结构、图状结构、集合结构数据的物理结构:是其逻辑结构在计算机中的表示或实现,因此又称其为存储结构。 存储结构:顺序存储结构和链式存储结构 顺序存储结构:利用数据元素在存储器中相对位置之间的某种特定的关系来表示数据元素之间的逻辑关系; 链式存储结构:除数据元素本身外,采用附加的“指针”表示数据元素之间的逻辑关系。 3、了解算法分析的基本方法,掌握算法时间复杂度相关的概念。 算法:是为了解决某类问题而规定的一个有限长的操作序列 或处理问题的策略 一个算法必须满足以下五个重要特性:1.有穷性2.确定性3.可行性4.有输入5.有输出 设计算法时,通常还应考虑满足以下目标: 1.正确性, 2.可读性, 3.健壮性 4.高效率与低存储量需求

数据结构与算法第三版第章参考答案

习题参考答案 一.选择题 1.从逻辑上可以把数据结构分为(C)两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2.在下面的程序段中,对x的斌值语句的频度为(C)。 for( t=1;k<=n;k++) for(j=1;j<=n; j++) x=x十1; A. O(2n) B. O (n) C. O (n2). D. O(1og2n) 3.采用顺序存储结构表示数据时,相邻的数据元素的存储地址(A)。 A.一定连续B.一定不连续 C.不一定连续 D.部分连续,部分不连续 4.下面关于算法说法正确的是(D)。 A.算法的时间复杂度一般与算法的空间复杂度成正比 B.解决某问题的算法可能有多种,但肯定采用相同的数据结构 C.算法的可行性是指算法的指令不能有二义性 D.同一个算法,实现语言的级别越高,执行效率就越低 5.在发生非法操作时,算法能够作出适当处理的特性称为(B)。 A.正确性 B.健壮性 C.可读性 D.可移植性 二、判断题 1.数据的逻辑结构是指数据的各数据项之间的逻辑关系。(√) 2.顺序存储方式的优点是存储密度大,且插人、删除运算效率高。(×) 3.数据的逻辑结构说明数据元素之间的次序关系,它依赖于数据的存储结构。(×) 4.算法的优劣与描述算法的语言无关,但与所用计算机的性能有关。(×) 5.算法必须有输出,但可以没有输人。(√) 三、筒答题 1.常见的逻辑结构有哪几种,各自的特点是什么?常用的存储结构有哪几种,各自的特点是什么? 【答】常见的四种逻辑结构: ①集合结构:数据元素之间是“属于同一个集合” ②线性结构:数据元素之间存在着一对一的关系 ③树结构:数据元素之间存在着一对多的关系 ④结构:数据元素之间存在着多对多的关系。 常见的四种存储结构有: ①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。 ②链接存储:对逻辑上相邻的元素不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。 ③索引存储:通过建立索引表存储结点信息的方法,其中索引表一般存储结点关键字和一个地点信息,可通过该地址找到结点的其他信息。 ④散列存储:根据结点的关键字直接计算出该结点的存储地址的方法。 2.简述算法和程序的区别。 【解答】一个算法若用程序设计语言来描述,则它就是一个程序。算法的含义与程序十分相

相关文档
最新文档