文档库 最新最全的文档下载
当前位置:文档库 › 数据结构问答题

数据结构问答题

数据结构问答题
数据结构问答题

数据结构复习题:绪论

问答题

1、当你为解决某一问题而选择数据结构时,应从哪些方面考虑?

答:通常从两方面考虑:第一是算法所需的存储空间量;第二是算法所需的时间。对算法所需的时间又涉及以下三点:

(1)程序运行时所需输入的数据总量。

(2)计算机执行每条指令所需的时间。

(3)程序中指令重复执行的次数。

2、简述逻辑结构与存储结构的关系.

答:数据的逻辑结构反映数据元素之间的逻辑关系(即数据元素之间的关联方式或“邻接关系”),数据的存储结构是数据结构在计算机中的表示,包括数据元素的表示及其关系的表示。

3、数据运算是数据结构的一个重要方面,试举例说明两个数据结构的逻辑结构和存储方式完全相同,只是对于运算的定义不同,因而两个结构具有显著不同的特性,则这两个数据结构是不同的.

答:栈和队列的逻辑结构相同,其存储表示也可相同(顺序存储和链式存储),但由于其运算集合不同而成为不同的数据结构。

数据结构复习题:线性表

问答题

1、线性表有两种存储结构:一是顺序表,二是链表。试问:

(1)两种存储表示各有哪些主要优缺点?

(2)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构?为什么?

(3)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么,应采用哪种存储结构?为什么?

答:(1)顺序存储是按索引(隐含的)直接存取数据元素,方便灵活,效率高,但插入、删除操作时将引起元素移动,因而降低效率;链接存储内存采用动态分配,利用率高,但需增设指示结点之间有序关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作十分简单。

(2)应选用链接表存储结构。其理由是,链式存储结构用一组任意的存储单元依次存储线性表里各元素,这里存储单元可以是连续的,也可以是不连续的。这种存储结构,在对元素作插入或删除运算时,不需要移动元素,仅修改指针即可。所以很容易实现表的容量扩充。

(3)应选用顺序存储结构。其理由是,每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。由此,只要确定了起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。而链表则是一种顺序存取的存储结构。

2、用线性表的顺序结构来描述一个城市的设计和规划合适吗?为什么?

不合适。因为一个城市的设计和规划涉及非常多的项目,很复杂,经常需要修改、扩充和删除各种信息,才能适应不断发展的需要。有鉴于此,顺序线性表不能很好适应其需要,故是不合适的。

3、在单链表和双向表中,能否从当前结点出发访问到任一结点?

在单链表中只能由当前结点访问其后的任一结点,因为没有指向其前驱结点的指针。而在双向链表中,既有指向后继结点的指针又有指向前驱结点的指针,故可由当前结点出发访问链表中任一结点。

4、对链表设置头结点的作用是什么?(至少说出两条好处)

答:(1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。

(2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。

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

答:1. 单链表。当我们知道指针p指向某结点时,能够根据该指针找到其直接后继,但是由于不知道其头指针,所以无法访问到p指针指向的结点的直接前趋。因此无法删去该结点。

2. 双链表。由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。其时间复杂度为O(1)。

3. 单循环链表。根据已知结点位置,我们可以直接得到其后相邻的结点位置(直接后继),又因为是循环链表,所以我们可以通过查找,得到p结点的直接前趋。因此可以删去p所指结点。其时间复杂度应为O(n)。

6、简述顺序表和链表存储方式的特点。

答:顺序表可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率;而链表内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序表方便,但结点的插入、删除操作较简单。

数据结构复习题:栈和队列

问答题

1、试述栈的基本性质?

答:由栈的定义可知,这种结构的基本性质综述如下:

(1)集合性。栈是由若干个元素集合而成,当没有元素的空集合称为空栈;

(2)线性结构。除栈底元素和栈顶元素外,栈中任一元素均有唯一的前驱元素和后继元素;

(3)受限制的运算。只允许在栈顶实施压入或弹出操作,且栈顶位置由栈指针所指示;

(4)数学性质。当多个编号元素依某种顺序压入,且可任意时刻弹出时,所获得的编号元素排列的数目,恰好满足卡塔南数列的计算,即:

Cn =Cn 2n /(n+1)

其中,n为编号元素的个数,Cn 是可能的排列数目。

4、为什么说栈是一种后进先出表?

栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表(LIFO--Last IN First Out表)。

5、对于一个栈,给出输入项A,B,C。如果输入项序列由A,B,C所组成,试给出全部可能的输出序列。

ABC,BAC,CBA

6、有字符串次序为3*y-a/y↑2,试利用栈给出将次序改变为3y-*ay2↑/-的操作步骤。(可用X代表扫描该字符串函数中顺序取一字符进栈的操作,用S代表从栈中取出一个字符加到新字符串尾的出栈的操作)。例如:ABC变为BCA,则操作步骤为XXSXX。

X:进栈S:出栈XSXXXSSSXXSXXSXXSSSS

7、跟踪以下代码,显示每次调用后队列中的内容。

InitQueue(qu);

EnQueue(qu,'A');

EnQueue(qu,'B);

EnQueue(qu,'C);

EnQueue(qu,x;

EnQueue(qu,x;

EnQueue(qu,'D);

EnQueue(qu,'E);

EnQueue(qu,'F);

EnQueue(qu,x)

EnQueue(qu,'G);

EnQueue(qu,X)

EnQueue(qu,X)

EnQueue(qu,X)

答:InitQueue(qu); 队列为空

EnQueue(qu,'A'); 队列为A

EnQueue(qu,'B); 队列为AB

EnQueue(qu,'C); 队列为ABC

EnQueue(qu,x; 队列为ABCx

EnQueue(qu,x; 队列为ABCxx

EnQueue(qu,'D); 队列为ABCxxD

EnQueue(qu,'E); 队列为ABCxxDE

EnQueue(qu,'F); 队列为ABCxxDEF

EnQueue(qu,x) 队列为ABCxxDEFx

EnQueue(qu,'G); 队列为ABCxxDEFxG

EnQueue(qu,X) 队列为ABCxxDEFxGX

EnQueue(qu,X) 队列为ABCxxDEFxGXX

EnQueue(qu,X) 队列为ABCxxDEFxGXXX

8、假设Q[0..10]是一个线性队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。

d,e,b,g,h入队

d,e出队

i,j,k,l,m入队

n,o,p入队

解答:d,e,b,g,h入队

d e b g h

F r

d,e出队

b g h

F r

i,j,k,l,m入队

b g h i j k l m

F r

n,o,p入队

b g h i j k l m n o p

F r

所有元素均正好能入队,共有11个存储空间,恰好11个元素

9、假设CQ[0..10]是一个环形队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。

d,e,b,g,h入队

d,e出队

i,j,k,l,m入队

b出队

n,o,p入队

解答:图略。

p不能入队,共有11个地址,p为第12个元素,故不能入队

10、有5个元素,其进栈次序为A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先出栈(即C第一个且D第一个出栈)的次序有哪几个?

答:三个:CDEBA,CDBEA,CDBAE

11、设输入元素为1、2、3、P和A,入栈次序为123PA,元素经过栈后到达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名?

答:一般说,高级语言的变量名是以字母开头的字母数字序列。故本题答案是:

AP321,PA321,P3A21,P32A1,P321A。

12、简要叙述栈和队列的特点.

答:栈和队列都是插入和删除操作的位置受限制的线性表。栈是限定仅在表尾进行插入和删除的线性表,是后进先出的线性表,而队列是限定在表的一端进行插入,在另一端进行删除的线性表,是先进先出的线性表

数据结构复习题:树和二叉树

问答题

1、对于二叉排序树,当所有结点的权都相等的情况下,最佳二叉排序树有何特点。

其特点是只有最下面的二层结点可以小于2,其它结点的度数必须为2

3、已知一组元素为(46、25、78、62、18、3

4、12、40、73),试画出按元素排列顺序输入而生成的一棵二叉排序树。

解答:得到的二叉排序树如下图所示。

46

25 78

18 34 62

12 40 73

4、已知一棵树的边的集合表示为:(L,N),(G,K),(G,L),(G,M),(B,E),(B,F),(D,G),

(D,H),(D,I),(D,J),(A,B),(A,C),(A,D))画出这棵树,并回答下列问题:

(1)树根是哪个结点?哪些是叶子结点?哪些是非终端结点?

(2)树的度是多少?各个结点的度是多少?

(3)树的深度是多少?各个结点的层数是多少?以结点G为根的子树的深度是多少?

(4)对于结点G,它的双亲是哪个结点?它的祖先是哪些结点?它的孩子是哪些结点?它的子孙是哪些结点?它的兄弟和堂兄弟分别是哪些结点?

解答:(1)树的根是A,而E、F、C、H、I、J、K、M、N是叶子结点,其它为非终端结点。

(2)树的度为4。deg(A)=3,deg(B)=2,deg(D)=4,deg(G)=3,deg(L)=1,其它各叶子结点的度均为0。

(3)树的深度为5(设根结点的深度为1)。level(A)=1,level(B)=2,level(C)=2, …,level(G)=3,…,level(K)=4,…,level(N)=5。

(4)D是G的双亲;A、D是G的祖先;K、L、M是G的孩子;K、L、M和N是G的子孙;H、I、J 是G的兄弟;E、F是G的堂兄弟。

5、设高度为h的二叉树上只有度为0和度为2的结点,问该二叉树的结点数可能达到的最大值和最小值。解答:最大值(高度为h的满二叉树) 20 +21 +22 +…+2h-1 =2h -1

最小值:第一层只有一个结点,其余的h-1层各有2个结点,所以最小值为2h-1个。

6、设二叉树BT的存储结构如下:

12345678910

┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓

Lchild ┃0┃0┃2┃3┃7┃5┃8┃0┃10┃1┃

┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫

data ┃J┃H┃F┃D┃B┃A┃C┃E┃G┃I┃

┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫

Rchild ┃0┃0┃0┃9┃4┃0┃0┃0┃0┃0┃

┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛

(1) 画出图。

(2) 写出前序、中序、后序遍历次序。

解答:(1)见下图。

A

B

C D

E F G

H I

J

(2)前序遍历:ABCEDFHGIJ

中序遍历:ECBHFDJIGA

后序遍历:ECHFJIGDBA

7、已知一棵二叉树先序遍历结果为ABCDEFGHIJ,中序遍历的结果为CBEDAHGIJF,试画出该二叉树。解答:由前序遍历结果可知该二叉树的根结点为A。由此及中序遍历结果可知,该二叉树在中序遍历下的左、右子树为

CBED和HGIJF

依此可推出前序遍历的左、右子树的结点序列为

BCDE和FGHIJ

B和F又分别为左、右子树的根结点,进而又可推出以B为根结点的左、右子树,以及以F为根结点的左、右子树。依此类推,可推出二叉树见下图。

A

B F

C D G

E H I

J

8、设a是含有n个元素的整数数组,写出一个求n个元素的平均值的递归定义。解答:#include

#define AVE(A,B) aver(A,B,0)

double aver(float *a,int n,int t)

{

if (t!=n) return (a[t]/n+aver(a,n,t+1));

else return 0;

}

int main(void)

{

float a[]={1,5,9,13,17};

printf("%f",AVE(a,5));

return 0;

}

9、设a是含有n个元素的整数数组:

(1) 写出求该数组中最大元素的递归定义。

(2) 写出求该数组中最小元素的递归定义。

答:(1)int A :: Max (int n) //递归求最大值

{

if (n==1) return E[0];

int t=Max ( n-1 );

if (E[n-1]>t) return E[n-1];

else return t;

}

(2) int A :: Min (int n) //递归求最小值

{

if (n==1) return E[0];

int t=Min ( n-1 );

if (E[n-1]>t) return E[n-1];

else return t;

}

10、设a是含有n个元素的整数数组:

(1) 写出求n个整数之和的递归定义。

(2) 写出求n个整数之积的递归定义。

解答:(1)int A :: Sum (int n) //递归求数组之和

{

if (n==1) return E[0];

else return E[n-1]+Sum (n-1);

}

(2)int A :: Multi (int n) //递归求整数之积

{

if (n==1) return E[0];

else return E[n-1]*Multi (n-1);

}

11、二维数组A[4][4](即A[0..3][0..3])的元素起始地址是loc(A[0][0])=1000,元素的长度为2,则LOC(A[2][2])的地址为多少?

答:LOC(A[2][2])= loc(A[0][0])+(2*4+2)*2=1000+20=1020

数据结构复习题:图

问答题

1、无向图G如下图:

B E

/ \ / \

A D G

\ / \ /

C F

试给出

(1)该图的邻接矩阵。

(2)该图的邻接表。

(3)从A出发的“深度优先”遍历序列。

(4)从A出发的“广度优先”遍历序列。

解答:(1) 图G的邻接矩阵

┏0110000┓

┃1001000┃

┃1001000┃

A=┃0110110┃

┃0001001┃

┃0001001┃

┗0000110┛

(2)邻接表如见:

┌─┬─┐ ┌─┬─┐ ┌─┬─┐

1│A│ ┼→─┤B│ ┼→─┤C│^│

├─┼─┤ ├─┼─┤ ├─┼─┤

2│B│ ┼→─┤A│ ┼→─┤D│^│

├─┼─┤ ├─┼─┤ ├─┼─┤

3│C│ ┼→─┤A│ ┼→─┤D│^│

├─┼─┤ ├─┼─┤ ├─┼─┤ ┌─┬─┐ ┌─┬─┐

4│D│ ┼→─┤B│ ┼→─┤C│ ┼→┤E│^├→─┤F│^│

(3)从顶点A出发按深度优先遍历序列(不是唯一的)为A、B、D、C、E、G、F

(4)从顶点A出发按广度优先遍历序列(不是唯一的)为A、B、C、D、E、F、G

2、用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否有关?

答:设图的顶点个数为n(n≥0),则邻接矩阵元素个数为n2,即顶点个数的平方,与图的边数无关。

3、对于稠密图和稀疏图,就存储空间而言,采用邻接矩阵和邻接表哪个更好些?

答:稠密图采用邻接矩阵好,稀疏图采用邻接表好

4、请回答下列关于图的一些问题:

(1) 有n个顶点的有向强连通图最多有多少条边?这样的图应该是什么形状?

(2) 有n个顶点的有向强连通图最少有多少条边?这样的图应该是什么形状?

(3) 表示一个有1000个顶点、1000条边的有向图的邻接矩阵有多少个矩阵元素?是否为稀疏矩阵?

答:(1)最多有n(n-1)条边

(2)最少有n条边

(3)106,不一定是稀疏矩阵(稀疏矩阵的定义是非零个数远小于该矩阵元素个数,且分布无规律)

5、对n个顶点的无向图和有向图,采用邻接矩阵和邻接表表示时,如何判别下列有关问题?

(1) 图中有多少条边?

(2) 任意两个顶点i和j是否有边相连?

(3) 任意一个顶点的度是多少?

答:无向图采用邻接表时,⑴边表中的结点个数之和除以2。⑵第i个边表中是否含有结点j。⑶该顶点所对应的边表中所含结点个数。

6、己知一棵二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,画出该二叉树的先序线索二叉树.

答:二叉树及线索二叉树(略)。

先序序列为:abcdefghij

7、下列整数序列由选序遍历一棵二叉排序树得到:50,40,30,45,65,55,70,80.试构造一棵这样的二叉排序树.

答:

数据结构复习题:内部排序

问答题

1、设有5000个无序的元素,希望用最快速度挑选出其中前10个最大的元素。在以下的排序方法中,采用哪种方法最好?为什么?

快速排序,堆排序,归并排序,基数排序的Shell排序。

1、上面所列的几种排序方法的速度都很块,但快速排序、归并排序、基数排序和希尔排序都是在排序结束后才能确定数据元素的全部顺序,而无法知道排序过程中部分元素的有序性。而堆排序则每次输入一个最大(或最小)的元素,然后对堆进行调整,保证堆顶的元素总是余下元素中最大(或最小)的。根据题意,只要选取前10个最大的元素,故采用堆排序方法是合适的

2、判断下列序列是否是堆。若不是堆,则把它们依次调整为堆。

(1) (100,85,98,77,80,60,82,40,20,10,66)。

(2) (100,98,85,82,80,77,66,60,40,20,10)。

(3) (100,85,40,77,80,60,66,98,82,10,20)。

(4) (10,20,40,60,66,77,80,82,85,98,100)。

解答:根据堆的定义可知堆中元素满足下面中的某一个式子的关系,

┌≤k2i ┌≥k2i

①ki 或② ki

└≤k2i+1 └≥k2i+1

因此(1)、(2)和(4)序列是堆。(3)不是堆。

(3) 调整为100,98,66,85,80,60,40,77,82,10,20后成为堆。

3、什么是内部排序?什么是排序方法的稳定性和不稳定性?

解答:假设给定含有n个记录(R1 ,R2 ,…,Rn )的文件,其相应的关键字为(K1 ,K2 ,…,Kn ),则排序是确定一个排列P(1),P(2),…,P(n),使得KP(1) ≤KP(2) ,…,KP(n) ,

从而得到有序文件(RP(1) ,RP(2) ,…,RP(n) )。整个排序过程都在内存进行的排序称为内部排序。

假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的记录的相对次序仍然保持不变,则这种排序方法是稳定的,否则称这种排序方法是不稳定的。

4、输入一个正整数序列{40,28,6,72,100,3,54,1,80,91,38},建立一棵二叉排序树,然后删除结点72,分别画出该二叉树及删除结点72后的二叉树。

5、设数据集合d={1,12,5,8,3,10,7,13,9},试完成下列各题:

(1) 依次取d中各数据,构造一棵二叉排序树bt;

(2) 如何依据此二叉树bt得到d的一个有序序列;

(3) 画出在二叉树bt中删除"12"后的树结构。

解答:(1)(3)图略。

(2)根据二叉排序树中左子树,根结点,右子树的排列顺序,有序序列:1,3,5,7,8,9,10,12,13 6、对给定的数列R={7,16,4,8,20,9,6,18,5},构告一棵二叉排序树,并且

(1) 给出按中序遍历得到的数列R1

(2) 给出按后序遍历得到的数列R2

解答:图略。中序遍历序列R1:5,6,4,7,8,9,16,18,20

后序遍历序列R2:5,6,4,9,8,18,20,16,7

7、设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用散列函数:H(key)=key%13

采用开放地址法的线性探测再散列方法解决冲突,试在0~18的散列地址空间中对该关键字序列构造散列表。解答:H(19)=19 MOD 13=6

H(01)=01 MOD 13=1

H(23)=23 MOD 13=10

H(14)=14 MOD 13=1(冲突)

H(14)=(1+1) MOD 19=2

H(55)=55 MOD 13=3

H(20)=20 MOD 13=7

H(84)=84 MOD 13=6 (冲突)

H(84)=(6+1) MOD 19=7 (仍冲突)

H(84)=(6+2) MOD 19=8

H(27)=27 MOD 13=1 (冲突)

H(27)=(1+1) MOD 19=2 (冲突)

H(27)=(1+2) MOD 19=3 (仍冲突)

H(27)=(1+3) MOD 19=4

H(68)=68 MOD 13=3 (冲突)

H(68)=(3+1) MOD 19=4 (仍冲突)

H(68)=(3+2) MOD 19=5

H(11)=11 MOD 13=11

H(10)=10 MOD 13=10 (冲突)

H(10)=(10+1) MOD 19=11 (仍冲突)

H(10)=(10+2) MOD 19=12

H(77)=77 MOD 13=12 (冲突)

H(77)=(12+1) MOD 19=13

因此,各关键字相应的地址分配如下:

address(01)=1

address(14)=2

address(55)=3

addre

8、线性表的关键字集合{87,25,310,08,27,132,68,95,187,123,70,63,47},共有13个元素,己知散列函数为:H(key)=k%13

采用拉链法处理冲突。设计出这种链表结构,并计算该表的成功查找的平均查找长度。

9、己知序列{17,18,60,40,7,32,73,65,85},请给出采用冒泡排序法对该序列作为升序排序时的每一趟的结果。解答:初始:17,18,60,40,7,32,73,65,85

第1趟:17,18,40,7,32,60,65,73,85

第2趟:17,18,7,32,40,60,65,73,85

第3趟:17,7,18,32,40,60,65,73,85

第4趟:7,17,18,32,40,60,65,73,85

第5趟:7,17,18,32,40,60,65,73,85

第5趟无元素交换,则排序结束。

10、己知序列{503,87,512,61,908,170,897,275,653,462},请给出采用快速排序法对该序列作升序排序时的每一趟结果。

解答:原始序列:503,87,512,61,908,170,897,275,653,462

第1趟:[462,87,275,61,170]503[897,908,653,512]

第2趟:[170,87,275,61] 462,503[897,908,653,512]

第3趟:[87,61]170[275] 462,503[897,908,653,512]

第4趟:61 [87]170[275] 462,503[897,908,653,512]

第5趟:61 ,87,170,[275] 462,503[897,908,653,512]

第6趟:61 ,87,170,275,462,503[897,908,653,512]

第7趟:61 ,87,170,275,462,503[512,653]897[908]

第8趟:61 ,87,170,275,462,503,512,[653] 897[908]

第9趟:61 ,87,170,275,462,503,653,897[908]

第10趟:61 ,87,170,275,462,503,653,897,908

11、己知序列{503,87,512,61,908,170,897,275,653,462},请给出采用的基数排序法对该序列作升序排序时的每一趟的结果。

解答:依题意,采用基数排序法排序的各趟的结果如下:

初始:503,87,512,61,908,170,897,275,653,462

1趟(按个位排序):170,61,462,512,503,653,275,87,897,908

2趟(按十位排序):503,908,512,653,61,462,170,275,87,897

3趟(按百位排序):61,87,170,275,462,503,512,653,897,908

12、己知序列{70,83,100,65,10,32,7,9},请给出采用直接插入排序法对该序列作升序排序时的每一趟的结果。解答:原始序列:70,83,100,65,10,32,7,9

第1趟结果:70,83,100,65,10,32,7,9

第2趟结果:70,83,100,65,10,32,7,9

第3趟结果:65,70,83,100,10,32,7,9

第4趟结果:10,65,70,83,100,32,7,9

第5趟结果:10,32,65,70,83,100,7,9

第6趟结果:7,10,32,65,70,83,100,9

第7趟结果:7,9,10,32,65,70,83,100

13、己知序列{10,18,4,3,6,12,1,9,18,8},请给出采用希尔排序法对该序列作升序排序时的每一趟结果。

解答:原始序列:10,18,4,3,6,12,1,9,18,8

分成5个子序列的结果:10,1,4,3,6,12,18,9,18,8

再分为2个子序列的结果:10,1,4,3,6,12,18,9,18,8

最后结果:1,3,4,6,8,9,10,12,18,18

14、己知序列{10,18,4,3,6,12,1,9,18,8},请给出采用归并排序法对该序列作作升序排序时的每一趟的结果。解答:采用2路归并排序的结果如下:

初始状态:10 ,18 ,4 ,3 ,6 ,12 ,1 ,9 ,18,8

第1趟归并后:10,18,3,4,6,12,1,9,8,18

第2趟归并后:3,4,10,18,1,6,9,12,8,18

第3趟归并后:1,3,4,6,9,10,12,18,8,18

最后1趟归并得结果:1,3,4,6,8,9,10,12,18,18

15、在冒泡排序过程中,有的关键字在某趟排序中朝着与最终排序相反的方向移动。试举例说明之。快速排序过程中有没有这种现象?

在逆序时排序码会朝着与最终位置相反的方向移动。例如(5,4,2,1),第一趟冒泡排序后为(4,2,1,5),关键字4的位置被移动到首位,朝着与最终排序相反的方向移动。快速排序没有这种现象。

16、如果在10^6个记录中找到两个最小的记录,你认为可采用下列方法中的什么关的排序方法所需的关键字比较次数最少?共计多少?

根据堆排序的特点,每次都是输出一个堆顶元素,然后对堆进行再调整,保证堆顶元素总是当前剩下元素的最大或最小,从而可知,欲在一个大量数据的文件中,如10^6个记录中找到两个最小的记录,可采用堆排序。

17、如果只想得到一个序列中第k个最小元素之前的部分排序序列,最好采用什么排序方法?为什么?如由这样的一个序列:{57,40,38,11,13,34,84,75,25,6,19,9,7}得到其第4个最小元素之前的部分序列{6,7,9,11},使用所

选择的算法实现时,要执行多少次比较?

解答:采用堆排序最合适,依题意可知只需取得第k个最小元素之前的排序序列时,堆排序的时间复杂度Ο(n+klog2n),若k≤nlog2n,则得到的时间复杂性是Ο(n)。

对于上述序列得到其前4个最小元素,使用堆排序实现时,执行的比较次数如下:

初始建堆:比较20次,得到6;

第一次调整:比较5次,得到7;

第二次调整:比较4次,得到9;

第三次调整:比较5次,得到11。

18、对于快速排序的非递归算法,可以用队列(而不用栈)实现吗?若能,说明理由;若不能,也要说明理由。

可以用队列来代替。在快速排序的过程中,通过一趟划分,可以把一个待排序区间分为两个子区间,然后分别对这两个子区间施行同样的划分。栈的作用是在处理一个子区间时,保存另一个区间的上界和下界。这个功能利用队列可以实现,只不过是处理子区间的顺序有所变动而已。

19、己知下列各种初始状态(长度为n)的元素,试问当利用直接插入法进行排序时,至少需要进行多少次比较(要求排序后的文件按关键字从小到大顺序排列)?

解答:依题意,最好情况下的比较次数即为最少比较次数。

⑴插入第i(2≤i≤n)个元素的比较次数为1,因此总的比较次数为:

1+1+……+1=n-1

⑵插入第i(2≤i≤n)个元素的比较次数为i,因此总的比较次数为:

2+3+……+n=(n-1)(n+2)/2

⑶比较次数最少的情况是所有记录关键码按升序排列,总的比较次数为:

n-1

⑷在后半部分元素的关键码均大于前半部分元素的关键码时需要的比较次数最少,总的比较次数为:

n-1

20、若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度:

(1) 查找不成功,即表中无关键字等于给定值k的记录.

(2) 查找成功,即表中有关键字等于给定值k的记录.

答:(1)有序和无序都是n+1

(2)有序和无序都是(n+1)/2

21、己知一个有序表为{12,18,20,25,29,32,40,62,83,90,95,98},当二分查找法为29和90的元素时,分别需要多少次比较才能查找成功?若采用顺序查找时,分别需要多少次比较才能查找成功?

答:二分法查29时,需要比较3次才能查找成功。二分法查90时,需要比较3次才能查找成功;顺序查找29时,需要比较5次才能查找成功。顺序查找90时,需要比较10次才能查找成功。

22、关键字序列{7,4,1,14,100,30,5,9,20,134},设哈希函数为h(key)=Key Mod 13,试给出表长为13的哈希表(用线性探测开放定址法处理冲突),并求出在等概率情况下,查找成功时和查找不成功时的平衡查找长度.

答:k 7 4 1 14 100 30 5 9 20 134

k%13 6 4 1 1 9 4 5 9 7 4

散列地址0 1 2 3 4 5 6 7 8 9 10 11 12

关键字 1 14 4 30 7 5 20 100 9 134

成功到位次数 1 2 1 2 1 3 2 1 2 8

不成功到位次数1 3 2 1 9 8 7 6 5 4 3 2 1

查找成功的平均查找长度为(1+2+1+2+1+3+2+1+2+8)/10=23/10

查找不成功的平均查找长度为(1+3+2+1+9+8+7+6+5+4+3+2+1)/13=4

23、比较直接插入排序和希尔排序的不同点.

答:直接插入排序:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。希尔排序:是针对直接插入排序算法的改进,该方法又称缩小增量排序。该方法实质上是一种分组插入方法24、给出关键字序列{17,8,21,35,32,15,21,25,12,23}的直接插入排序过程.

答:(8,17)21,35,32,15,21,25,12,23

(8,17,21)35,32,15,21,25,12,23

(8,17,21,35)32,15,21,25,12,23

(8,17,21,32,35)15,21,25,12,23

(8,15,17,21,32,35)21,25,12,23

(8,15,17,21,21,32,35)25,12,23

(8,15,17,21,21,25,32,35)12,23

(8,12,15,17,21,21,25,32,35)23

(8,12,15,17,21,21,23,25,32,35)

25、指出堆和二叉排序树的区别?

答:在二叉排序树中,每个结点的值均大于其左子树上所有结点的值,小于其右子树上所有结点的值,对二叉排序树进行中序遍历得到一个有序序列。所以,二叉排序树是结点之间满足一定次序关系的二叉树;堆是一个完全二叉树,并且每个结点的值都大于或等于其左右孩子结点的值(这里的讨论以大根堆为例),所以,堆是结点之间满足一定次序关系的完全二叉树。

26、堆排序是否是一种稳定的排序方法?为什么?试举例说明。

答:堆排序不是稳定的排序方法。因为堆排序再调整堆时,有可能使原来键值相等的元素的相对位置改变,所以是不稳定排序。例如对键值序列{7,4,2,2},建小根堆由小到大排序的结果是{2,2,4,7},两个2的相对位置改变了。

27、对于n个元素组成的线性表进行快速排序,所需要进行的比较次数与这n个元素的初始排列有关。问:

(1)当n=7 时,最好情况下需进行多少次比较?请说明理由。

(2)当n=7 时,给出一个最好情况的初始排列的实例。

(3)当n=7 时,在最坏情况下需进行多少次比较?请说明理由。

(4)当n=7 时,给出一个最坏情况的初始排序的实例。

答:(1) 在最好情况下,假设每次划分能得到两个长度相等的子文件,文件的长度n=2k-1,那么第一遍划分得到两个长度均为?n/2?的子文件,第二遍划分得到4个长度均为?n/4?的子文件,以此类推,总共进行k=log2(n+1)遍划分,各子文件的长度均为1,排序完毕。当n=7时,k=3,在最好情况下,第一遍需比较6次,第二遍分别对两个子文件(长度均为3,k=2)进行排序,各需2次,共10次即可。

(2) 在最好情况下快速排序的原始序列实例:4,1,3,2,6,5,7。

(3) 在最坏情况下,若每次用来划分的记录的关键字具有最大值(或最小值),那么只能得到左(或右)子文件,其长度比原长度少1。因此,若原文件中的记录按关键字递减次序排列,而要求排序后按递增次序排列时,快速排序的效率与冒泡排序相同,其时间复杂度为O(n2)。所以当n=7时,最坏情况下的比较次数为21次。

(4) 在最坏情况下快速排序的初始序列实例:7,6,5,4,3,2,1,要求按递增排序。

28、已知{503,87,512,61,908,170,897,275,653,462},采用二路归并排序法对该序列作升序排序时的每一趟的结果。

答:初始关键字:503,87,512,61,908,170,897,275,653,462

一趟归并之后:87,503,61,512,170,908,275,897,462,653

两趟归并之后:61,87,503,512,170,275,897,908,462,653

三趟归并之后:61,87,170,275,503,512,897,908,462,653

四趟归并之后:61,87,170,275,462,503,512,653,897,908

29、在堆排序、快速排序和归并排序中:

(1)若只从存储空间考虑,则应首先选取哪能种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?

(2)若只从排序结果的稳定性考虑,则应选取哪种排序方法?

(3)若只从平均情况下排序最快考虑,则应选取哪种排序方法?

(4)若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?

答:(1)堆排序,快速排序,归并排序

(2)归并排序

(3)快速排序

(4)堆排序

30、有一个有序表R[1..13]={1,3,9,12,32,41,45,62,75,77,82,95,100},当用二分查找法查找关键字为82的结点时,经多少次比较后查找成功,依次与哪些关键字进行比较?

答:经4次比较后查找成功,依次与关键字45,77,95,82进行比较。

31、以关键字序列{265,301,751,129,937,863,742,694,76,438}为例,给出归并排序算法的各趟排序结束时,关键字序列的状态.

答:初始关键字:265,301,751,129,937,863,742,694,76,438

一趟归并之后:265,301,129,751,863,937,694,742,76,438

两趟归并之后:129,265,301,751,694,742,863,937,76,438

三趟归并之后:129,265,301,694,742,751,863,937,76,438

四趟归并之后:76,129,256,301,438,694,742,751,863,937

32、画出对长度为10的有序表进行二分查找的一棵判断树,并求其等概率时查找成功的平均查找长度.

答:判断树(略)。

ASL=(1+2+2+3+3+3+3+4+4+4)/10=2.9

33、简述二路归并排序思想.

答:将两个有序表合并为一个有序表。1个元素的表总是有序的,所以对n个元素的待排序列,每个元素可看成1个有序子表。对子表两两合并生成个子表,所得子表除最后一个子表长度可能为1外,其余子表长度均为2。再进行两两合并,直到生成n个元素按关键码有序的表。

34、己知待排序的关键字序列为:{72,71,74,80,68,14,86,37,17}.请列出快速排序过程中第一趟排序的最终结果.

答:初始关键字:[72],71,74,80,68,14,86,37,17

(1)17,71,74,80,68,14,86,37,72

(2)17,71,72,80,68,14,86,37,74

(3)17,71,37,80,68,14,86,72,74

(4)17,71,37,72,68,14,86,80,74

完成一趟排序:17,71,37,14,68,[72],86,80,74

35、设有关键字序列为:{2,4,6,9,14,16,13}.基本区域长度为8(地址0..7),哈希函数采用除留余数法,用线性探查法解决冲突.试画出其存储结构,并给出查找成功的平均查找长度.

答:k 2 4 6 9 14 16 13

k%8 0 0 0 1 6 0 5

得到的散列表如下:

0 1 2 3 4 5 6 7

2 4 6 9 16 1

3 14

成功到位次数 1 2 3 3 5 1 1

查找成功的平均查找长度为(1+2+3+3+5+1+1)/7=16/7

36、己知一组元素的排序码为(46,74,16,53,14,26,40,38,86,65,27,34)

1. 利用直接插入排序的方法写出每次向前面有序表插入一个元素后的排序结果.

2. 利用直接选择排序方法写出每次选择和交换后的排列结果.

3. 利用堆排序的方法写出在构成初始堆和利用堆排序的过程中,每次筛运算后的排列结果,并画出初始堆所对应的完全二叉树.

4 利用快速排序的方法写出每一层划分后的排列结果,并画出由此快速排序得到的二叉搜索树.

5 利用归并排序的方法写出每一趟二路归并排序后的结果.

答:(1) ( 46 ) ( 74 16 53 14 26 40 38 86 65 27 34 ) ← 初态

( 46 74 ) ( 16 53 14 26 40 38 86 65 27 34 )

( 16 46 74 ) ( 53 14 26 40 38 86 65 27 34 )

( 16 46 53 74 ) ( 14 26 40 38 86 65 27 34 )

( 14 16 46 53 74 ) ( 26 40 38 86 65 27 34 )

( 14 16 26 46 53 74 ) ( 40 38 86 65 27 34 )

( 14 16 26 40 46 53 74 ) ( 38 86 65 27 34 )

( 14 16 26 38 40 46 53 74 ) ( 86 65 27 34 )

( 14 16 26 38 40 46 53 74 86 ) ( 65 27 34 )

( 14 16 26 38 40 46 53 65 74 86 ) ( 27 34 )

( 14 16 26 27 38 40 46 53 65 74 86 ) ( 34 )

( 14 16 26 27 34 38 40 46 53 65 74 86 )

(2) ( 46 74 16 53 14 26 40 38 86 65 27 34 )

37、给出关键字序列{17,8,21,35,32,15,21,25,12,23}的希尔排序过程.

答:希尔排序(增量为5,2,1)的过程如下:

初始关键字17 8 21 35 32 15 21 25 12 23 (d1=5)

第一趟排序结果15 8 21 12 23 17 21 25 35 32 (d2=2)

第二趟排序结果15 8 21 12 21 17 23 25 35 32 (d3=1)

第三趟排序结果8 12 15 17 21 21 23 25 32 35

数据结构经典例题

数据结构例题(及答案) 项目一习题(答案) 一选择题 1. 算法的计算量的大小称为计算的(B )。 A( 效率 B. 复杂性 C. 现实性 D. 难度 2.算法的时间复杂度取决于(C ) A(问题的规模 B. 待处理数据的初态 C. A和B 3(从逻辑上可以把数据结构分为(C )两大类。 A(动态结构、静态结构 B(顺序结构、链式结构 C(线性结构、非线性结构 D(初等结构、构造型结构 4(连续存储设计时,存储单元的地址(A )。 A(一定连续 B(一定不连续 C(不一定连续 D(部分连续,部分不连续 5. 以下属于逻辑结构的是(C )。 A(顺序表 B. 哈希表 C.有序表 D. 单链表 二、判断题 1. 数据元素是数据的最小单位。(×) 2. 记录是数据处理的最小单位。(×) 3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系;(×) 4(程序一定是算法。(×) 5. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。(×) 6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(×) 7. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。(?)

8. 数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构. (×) 三、填空 1(数据的物理结构包括数据元素的表示和数据元素间关系的表示。 2. 对于给定的n个元素,可以构造出的逻辑结构有集合,线性结构,树形 结构,图状结构或网状结构四种。 3(数据的逻辑结构是指数据的组织形式,即数据元素之间逻辑关系的总体。而 逻辑关系是指数据元素之间的关联方式或称“邻接关系”。 4(一个数据结构在计算机中表示(又称映像) 称为存储结构。 5(抽象数据类型的定义仅取决于它的一组逻辑特性,而与在计算机内部如何表 示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响 其外部使用。 6(数据结构中评价算法的两个重要指标是算法的时间复杂度和空间复杂度。 7. 数据结构是研讨数据的逻辑结构和物理结构,以及它们之间的相互 关系,并对与这种结构定义相应的操作(运算),设计出相应的算法。 ( 一个算法具有5个特性: 有穷性、确定性、可行性,有零个或多个输入、 有一个或多个输8 出。 四、应用题 1. 1. 数据结构是一门研究什么内容的学科, 答:数据结构是一门研究在非数值计算的程序设计问题中,计算机的操作对象 及对象间的关系和施加于对象的操作等的学科 2. 2. 数据元素之间的关系在计算机中有几种表示方法,各有什么特点, 答:四 种表示方法

结构设计常见问题解答

结构设计常见问题解答

1.梁裂缝控制与粱端弯矩调幅矛盾的解答 2.次梁对整体刚度贡献与点铰接问题 3.位移比与周期比对扭转控制有什么区别 4.质疑:周期折减系数 5.为什么不用pkpm自动梁配筋,而是要对SATWE信息手动配筋 6.大小偏心柱与单双偏压问题 1、板厚一般怎么取,与跨度有什么关系? 2、布置梁的时候,一般梁与梁之间的间距多少经济?(包括次梁的) 3、住宅楼的梁高一般怎么取? 4、框架结构柱距多少较为经济? 5、纯框架结构适合的高度和层数? 6、框架柱的混凝土等级一般怎么取? 7、框架结构的变形特性? 8、混凝土中,温度收缩怎么处理? 9、剪力墙高宽比多少为宜? 10、剪力墙混凝土等级一般取多少? 11、合理的剪力墙数量? 12、框架结构合理的重量范围? 13、怎么估算柱子截面? 14、轴压比超了怎么调? 15、位移比不满足怎么调?

16、周期比不满足怎么调? 17、位移角不满足怎么调? 18、PKPM建模中怎么降板? 19、PKPM中板厚为零和房间开洞的区别? 20、PKPM中虚梁怎么建? 21、什么情况下点铰? 22、超筋了怎么处理? 23、基础设计时,什么情况下要输入详细的地质资料? 24、基础底标高怎么考虑? 25、活荷载折减在PKPM中折减怎么实现? 1. 梁裂缝控制与粱端弯矩调幅矛盾的解答 a支座弯矩调幅与截面裂缝宽度验算是一对矛盾,对支座调幅处理的目的是为适当减小支座弯矩,而对支座截面进行裂缝宽度计算往往又需要加大截面的配筋,从而又加大了支座截面的弯矩。支座不调幅时支座弯矩大,截面配筋大,裂缝宽度不能满足规范要求,及多配

数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系

2007 C C C 语言的特点,简单的C 程序介绍,C 程序的上机步骤。1 、算法的概念2、简单的算法举例3、算法的特性4、算法的表示(自然语言、流程图、N-S 图表示) 1 、 C 的数据类型、常量与变星、整型数据、实型数据、字符型数据、字符串常量。2、 C 的运算符运算意义、优先级、结合方向。3、算术运算符和算术表达式,各类数值型数据间的混合运算。4、赋值运算符和赋值表达式。5、逗号运算符和逗号表达式。 1 、程序的三种基本结构。2、数据输入输出的概念及在C 语言中的实现。字符数据的输入输出,格式输入与输出。 1 、关系运算符及其优先级,关系运算和关系表达式。2、逻辑运算符及其优先级,逻辑运算符和逻辑表达式。3、if语句。if语句的三种形式,if语句的嵌套,条件运算符。4、switch 语句. 1 、while 语句。2、do/while 语句。3、for 语句。4、循环的嵌套。5、break 语句和continue 语句。1 、一维数组的定义和引用。2、二维数组的定义和引用。3、字符数组。4、字符串与字符数组。5、字符数组的输入输出。6、字符串处理函数1 、函数的定义。2、函数参数和函数的值,形式参数和实际参数。3、函数的返回值。4、函数调用的方式,函数的声明和函数原型。5、函数的嵌套调用。 6、函数的递归调用。 7、数组作为函数参数。 8、局部变量、全局变量的作用域。 9、变量的存储类别,自动变星,静态变量。1 、带参数的宏定义。2、“文件包含”处理。1 、地址和指针的概念。2、变量的指针和指向变量的指针变量。3、指针变量的定义

和引用。4、指针变量作为函数参数。5、数组的指针和指向数组的指针变量。6、指向数组元素的指针。7、通过指针引用数组元素。8、数组名作函数参数。9、二维数组与指针。 1 0、指向字符串的指针变星。字符串的指针表示形式,字符串指针作为函数参数。11 、字符指针变量和字符数组的异同。1 2、返回指针值的函数。1 3、指针数组。1 、定义结构体类型变星的方法。2、结构体变量的引用。3、结构体变量的初始化。4、结构体数组5、指向结构体类型数据的指针。6、共用体的概念,共用体变量的定义和引用,共用体类型数据的特点。typedef 1 、数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。2、数据结构的两大类逻辑结构和常用的存储表示方法。3、算法描述和算法分析的方法,对于一般算法能分析出时间复杂度。 1 、线性表的逻辑结构特征。2、线性表上定义的基本运算。3、顺序表的特点,即顺序表如何反映线性表中元素之间的逻辑关系。4、顺序表上的插入、删除操作及其平均时间性能分析。5、链表如何表示线性表中元素之间的逻辑关系。6、链表中头指针和头结点的使用。7、单链表上实现的建表、查找、插入和删除等基本算法,并分析其时间复杂度。8、顺序表和链表的主要优缺点。9、针对线性表上所需的主要操作,选择时空性能优越的存储结构。 1 、栈的逻辑结构特点.栈与线性表的异同。2、顺序栈和链栈实现的进栈、退栈等基本算法。3、栈的空和栈满的概念及其判定条件。4、队列的逻辑结构特点,队列与线性表的异同。5、顺序队列(主要是循

经典数据结构面试题(含答案)

栈和队列的共同特点是__________________________ .栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是 __________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 ____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________

结构设计常见问题问答

结构设计常见问题问答 1、住宅工程中顶层为坡屋顶,屋顶是否需设水平楼板?顶层为坡屋顶时层高有无限制?总高度应如何计算? 住宅工程中的坡屋顶,如不利用时檐口标高处不一定设水平楼板。关于顶层为坡屋顶时层高的计算问题新规范未做具体规定,结构设计时由设计人员根据实际情况而定,取质点的计算高度仍不超过4m.檐口标高处不设水平楼板时,按抗震规范,总高度可以算至檐口(此处檐口指结构外墙体和屋面结构板交界处的屋面结构板顶)。檐口标高附近有水平楼板,且坡屋顶不是轻型装饰屋顶时,上面三角形部分为阁楼,此阁楼在结构计算上应做为一层考虑,高度可取至山尖墙的一半处,即对带阁楼的坡屋面应算至山尖墙的二分之一高度处。 2、砖墙基础埋深较大,构造柱是否应伸至基础底部?较大洞口两侧要设构造柱加强,一般多大的洞口算较大洞口? 新规范,但应伸入室外地面下500mm,或锚入浅于500mm的基础圈梁内,两条满足其中的一条即可。但需注意此处的基础圈梁是指位于基础内的,不是一般位于相对标高±0.0m 的墙体圈梁。构造柱的钢筋伸入基础圈梁内应满足锚固长度的要求。 X&Qs$对于底层框架砖房的砖房部分,一般允许将砖房部分的构造柱锚固于底部的框架柱或钢筋混凝土抗震墙内(上层与下层的侧移刚度比应满足要求)。:新规范表,内纵墙和横墙的较大洞口,指2000mm 以上的洞口;外纵墙的较大洞口,则由设计人员根据开间和门窗洞尺寸的具体情况确定。 3、填充墙的构造柱与多层砌体房屋的构造柱有何不同? 填充墙设构造柱,属于非结构构件的连接,与多层砌体房屋设置的钢筋混凝土构造柱有一定差异,应结合具体情况分析确定。如挑梁端部设置填充墙构造柱,挑梁在计算时应考虑构造柱传递来的荷载。 4、抗震新规范 新规范,主要指不要在墙体厚度内开洞,烟道等应设在墙外,成为附墙烟道等,以免墙体应力集中。 5、底层框架结构的计算高度如何取?若取到基础顶,抗震墙厚度取1/20层高,是否过大? 计算高度的取值应根据实际情况而定,主要是看地坪的嵌固情况而定,若嵌固得好,如作刚性地坪或有连续的地基梁,可以从嵌固处取,否则从基础顶;抗震墙厚取1/20层高,这里的层高与计算高度的概念不同,是指从一层地坪到一层楼板顶的高度。 6、多层砌体房屋和底部框架、内框架房屋室内外高差大于0.6m时,房屋总高度允许比表,但不应多于1m,那么此时是否仍可将小数点后第一位数四舍五入吗? 多层砌体房屋和底部框架、内框架房屋,若室内外高差大于0.6m时,房屋总高度允许比新规范,但不应多于1m.因已将总高度值适当增加,故此时不应再将小数点后第一位数四舍五入,即增加值不大于1m.

经典数据结构面试题(含答案)

.栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是__________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________

大数据结构经典复习题(仅供参考)

一、选择题(20分) 1.下面关于线性表的叙述错误的是(D )。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 (C) 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插入和删除操作的实现 2.设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A )。 (A) BADC (B) BCDA (C) CDAB (D) CBDA 3.设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C )。 (A) 9 (B) 10 (C) 11 (D) 12 4.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为(B )。 (A) O(1) (B) O(log2n) (C) (D) O(n2) 5.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列(B )方法可以达到此目的。 (A) 快速排序(B) 堆排序(C) 归并排序(D) 插入排序 第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为O(log2n)。 6.下列四种排序中(D )的空间复杂度最大。 (A) 插入排序(B) 冒泡排序(C) 堆排序(D) 归并排序

7.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为(C )。 (A) O(n) (B) O(nlog2n) (C) O(1) (D) O(n2) 8.设一棵二叉树的深度为k,则该二叉树中最多有(D )个结点。 (A) 2k-1 (B) 2k(C) 2k-1(D) 2k-1 9.在二叉排序树中插入一个结点的时间复杂度为(B )。 (A) O(1) (B) O(n) (C) O(log2n) (D) O(n2) 10.设用链表作为栈的存储结构则退栈操作(B )。 (A) 必须判别栈是否为满(B) 必须判别栈是否为空 (C) 判别栈元素的类型(D) 对栈不作任何判别 11.下列四种排序中(A )的空间复杂度最大。 (A) 快速排序(B) 冒泡排序(C) 希尔排序(D) 堆 12.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是(C )。 (A) N0=N1+1 (B) N0=N l+N2(C) N0=N2+1 (D) N0=2N1+l 13.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不 超过(A )。 (A) log2n+1 (B) log2n-1 (C) log2n (D) log2(n+1) 14.数据的最小单位是(A )。 (A) 数据项(B) 数据类型(C) 数据元素(D) 数据变量 15.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为(D )。 (A) O(log2n) (B) O(1) (C) O(n2) (D) O(n)

建筑结构设计常见问题

建筑结构设计中常见问题及应对策略分析摘要:随着我国建筑行业发展规模不断扩大、发展速度不断加快的同时,建筑功能、建筑结构相关问题日益突出,在建设过程中或多或少的会出现这样、那样的问题,给建筑的安全性埋下大量的隐患。因此,在新时代发展,如何不断优化房屋建筑结构设计,有效的提高房屋建筑的安全性、完善房屋建筑的功能性,成为广大人们群众普遍关注和重点研究的话题之一。 引言 近年来,我国经济快速发展,人民生活水平不断提高,人们对建筑的要求越来越高,因此,建筑业的发展速度不断加快。人们所居住的房屋逐渐由单层、小层向高层复杂化变化,房屋的建筑结构设计也由简单的砖混结构变的多种多样。建筑结构设计的好坏直接影响到人们居住的质量高低。因此,对房屋建筑进行结构设计的同时,必须及时找出设计中的常见问题并及时找好方法解决,以此来保障房屋建筑产品的安全。 一、建筑结构设计概述 由于建筑物功能不同,建筑物分类方法也多种多样。根据建筑物使用功能,可分为民用建筑、工业建筑两种;根据建筑物的结构材料,可分为砌体结构、钢结构、混凝土结构、木结构、混合结构;根据建筑物层数,可分为超高层、高层、多层、单层建筑;根据建筑物的结构形式,可分为筒体结构、剪力墙结构、框架结构、排架结构等。建筑结构是建筑物功能的基础环节,建筑结构设计是建筑设计的重要部

分,其具体过程为:方案设计、结构分析、构件设计、绘制施工图。为了保证建筑结构的安全性和可靠性,在结构设计时应注意以下内容:一是计算方面:应考虑各种结构构件的承载极限,并进行验算;二是由于建筑结构会受到多种作用力,在结构设计时应综合考虑各种作用力;三是抗震方面:我国抗震设防的烈度为 6~9 度,在建筑结构设计时应根据所在地区的房屋高度、结构类型、烈度等情况确定抗震等级。 二、房屋建筑结构设计过程中常见问题 1、结构布置不合理 建筑房屋的设计结构越规则,结构的布置才能越合理,这是建筑房屋结构设计的中心环节。一方面要注意建筑的平、立面外形尺寸大小和抗侧力物体布置的局面,满足承载力分布等各种因素的综合要求。另一方面,由于很多因素都可以造成结构的不规则,特别是针对于复杂的建筑结构,利用若干已经简单化的定量指标来划分不规则的程度并明确限定范围是几乎不可能的。 由于对规范标明的相应的设计规定不了解和对结构抗震理念的缺乏,有些房屋结构的设计人员在结构设计时不注重相关规则,导致建筑过程中出现了规则性不好、抗震性差的房屋。这主要表现在以下几点:(1)设计后的建筑平面凹凸不平,规则性差。(2)导致楼层错层。高层建筑中错层问题较严重时,会阻断楼层的楼板连续性,对建筑结构抗震十分不利。(3)在高层建筑结构中采用了两种或以上的复杂结构。例如错层结构、带转换层结构和多塔楼结构等,都属于复杂

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

数据结构经典例题

数据结构经典例题 1.设计一个算法将L拆分成两个带头节点的单链表L1和L2。 void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L->next,*q,*r1; //p指向第1个数据节点 L1=L; //L1利用原来L的头节点 r1=L1; //r1始终指向L1的尾节点 L2=(LinkList *)malloc(sizeof(LinkList));//创建L2的头节点 L2->next=NULL; //置L2的指针域为NULL while (p!=NULL) { r1->next=p; //采用尾插法将*p(data值为ai)插入L1中 r1=p; p=p->next; //p移向下一个节点(data值为bi) q=p->next; //由于头插法修改p的next域,故用q保存*p的后继节点 p->next=L2->next; //采用头插法将*p插入L2中 L2->next=p; p=q; //p重新指向ai+1的节点 } r1->next=NULL; //尾节点next置空 } 2.查找链表中倒数第k个位置上的节点(k为正整数)。若查找成功,算法输出该节点的data域的值,并返回1;否则,只返回0。 typedef struct LNode {int data; struct LNode *link; } *LinkList; int Searchk(LinkList list,int k) { LinkList p,q; int count=0; p=q=list->link; while (p!=NULL) { if (countlink; p=p->link; } if (count

数据结构模拟卷(含答案)经典习题培训讲学

数据结构模拟卷(含答案)经典习题

练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4

6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位10. 下列图示的顺序存储结构表示的二叉树是( )

数据结构典型例题

基本概念典型例题 一、单项选择题 [例6-1]数据结构用集合的观点可以表示为一个二元组DS=(D,R)。其中,D是( ①)的有穷集合,R是D上( ②)的有限集合。 ①A.算法B. 数据元素C. 数据操作D. 逻辑结构 ②A. 操作B. 映像C. 存储D.关系 解析:由数据结构的集合形式化定义可知,本题答案为:①B;②D。 [例6-2]数据的常用存储结构中不包括( )。 A.顺序存储结构B.线性结构C.索引存储结构D.散列存储结构 解析:数据通常有四种基本的存储方法,即顺序存储方法、链式存储方法、索引存储 方法和散列存储方法。由此可知,本题答案为:B。 [例6-3] 算法指的是( ①),它必须具备( ②)这三个特性。 ①A.计算方法B.排序方法C.解决问题的步骤序列D.调度方法 ②A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性 C.确定性、有穷性、稳定性D.易读性、稳定性、安全性 解析:算法是对特定问题求解步骤的一种描述,是由若于条指令组成的有限序列。它 必须满足以下性质:输人性、输出性、有穷性、确定性、无二义性和可行性。由此可知,本 题答案为:①㈠②B。 [例6-4] 在下面的程序段中,对x的赋值语句的执行频度为( )。 for(i=0;i

44个结构设计常见问题解析(干货)

44个结构设计常见问题解析(干货) 1、结构类型如何选择? 解释: (1)对于高度不超过150米的多高层项目一般都选择采用钢筋混凝土结构; (2)对于高度超过150米的高层项目则可能会采用钢结构或混凝土结构类型; (3)对于落后偏远地区的民宅或小工程则可能采用砌体结构类型. 2、结构体系如何选择? 解释:对于钢筋混凝土结构,当房屋高度不超过120米时,一般均为三大常规结构体系——框架结构、剪力墙结构、框架—剪力墙结构. (1)对于学校、办公楼、会所、医院以及商场等需要较大空间的建筑, 当房屋高度不超过下表时,一般选择框架结构; 当房屋高度超过下表时,一般选择框架-剪力墙结构; (2)对于高层住宅、公寓、酒店等隔墙位置固定且空间较小的建筑项目一般选择剪力墙结构.当高层住宅、公寓、酒店项目底部一层或若干层因建筑功能要求(如大厅或商业)需要大空间时,一般采用部分框支剪力墙结构.

(3)对于高度大于100米的高层写字楼,一般采用框架-核心筒结构. 3、40米高的办公楼采用框架结构合理吗? 解释:不合理.7度区框架结构经济适用高度为30米,超过30米较多时应在合适的位置(如楼梯、电梯、辅助用房)布置剪力墙,形成框架-剪力墙结构体系.这样子剪力墙承受大部分水平力,大大减小框架部分受力,从而可以减小框架柱、框架梁的截面和配筋,使得结构整体更加经 济合理. 4、框架结构合理柱网及其尺寸? 解释: (1)柱网布置应有规律,一般为正交轴网. (2)普通建筑功能的多层框架结构除个别部位外不宜采用单跨框架,学校、医院等乙类设防建筑以及高层建 筑不应采用单跨框架. (3)仅从结构经济性考虑,低烈度区(6度、7度)且风压小(小于0.4)者宜采用用大柱网(9米左右);高烈度区(8度及以上)者宜采用中小柱网(4~6米左右). (4)一般情况下,柱网尺寸不超过12米;当超过12米时可考虑采用钢结构.

数据结构实验 - 图的储存与遍历

一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 三、附录: 在此贴上调试好的程序。 #include #include #include ????????????????=010******* 010101000100010A

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

数据结构(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

数据结构经典算法试题

1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。【北京大学1998 三、1 (5分)】 LinkedList Union(LinkedList la,lb) { pa=la->next; pb=lb->next; la->next=null; while(pa!=null && pb!=null) ∥当两链表均不为空时作 if(pa->data<=pb->data) { r=pa->next; pa->next=la->next; ∥将pa结点链于结果表中,同时逆置。 la->next=pa; pa=r; } else {r=pb->next; pb->next=la->next; ∥将pb结点链于结果表中,同时逆置。 la->next=pb; pb=r; } while(pa!=null) ∥将la表的剩余部分链入结果表,并逆置。 {r=pa->next; pa->next=la->next; la->next=pa; pa=r; } while(pb!=null) {r=pb->next; pb->next=la->next; la->next=pb; pb=r; } }

1)设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。【南京理工大学1997 四、3(15分)】 LinkedList Union(LinkedList ha, hb)∥ha和hb是两个无头结点的数据域值递增有序的单链 {LinkedList 表,本算法将hb中并不出现在ha中的数据合并到ha中,合并中不能破坏hb链表。 la; la=(LinkedList)malloc(sizeof(LNode)); la->next=ha; pa=ha; pb=hb; pre=la; while(pa&&pb) if(pa->datadata)∥处理ha中数据 {pre->next=pa;pre=pa;pa=pa->next;} else if(pa->data>pb->data)∥处理hb中数据。 {r=(LinkedList)malloc(sizeof(LNode)); r->data=pb->data; pre->next=r; pre=r; pb=pb->next;} Else∥处理pa- >data=pb->data; {pre->next=pa; pre=pa; pa=pa->next;∥两结点数据相等时,只将ha的数据链入。 pb=pb->next; } if(pa!=null)pre->next=pa;∥将两链表中剩余部分链入结果链表。 else pre->next=pb; free(la); }

数据结构经典题目c语言代码

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr;

数据结构课后习题详解(超完整,超经典)

第1章 绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解: ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C) 操作结果:销毁复数C Get(C,k,&e) 操作结果:用e 返回复数C 的第k 元的值 Put(&C,k,e) 操作结果:改变复数C 的第k 元的值为e IsAscending(C) 操作结果:如果复数C 的两个元素按升序排列,则返回1,否则返回0

相关文档
相关文档 最新文档