数据结构习题和答案

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

习题课

填空

1、对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为,双亲结点的编号为。

2、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。

3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数

为个。

4、为了实现折半查找,线性表必须采用方法存储。顺序

5、一种抽象数据类型包括数据对象和。

6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__________和_______。

7、数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。

8、队列的插入操作在进行,删除操作在进行。

9、二叉搜索树的中序遍历得到的结点序列为____ ____。

10、在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

11、栈的特点是。

12、在单链表中,除了首元结点外,任一结点的存储位置由。

13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。

14、深度为k(设根的层数为1)的完全二叉树至少有个结点,至多

有个结点。

15、一棵深度为6的满二叉树有个分支结点和个叶子结点。

16、一个算法的效率可分为效率和效率。

17、队列的特点是。

18、一棵深度为5的满二叉树中的结点数为个。

19、在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。

简答题

1、已知一组元素为(38,26,62,94,35,50,28,55),画出按元素排列顺序输入生成的一棵二叉搜索树。

答:

2、假设有二维数组A[0..5,0..7],每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,计算:

(1)末尾元素A57的第一个字节地址为;

(2)若按列存储时,元素A47的第一个字节地址为。

(3) 数组A的体积(存储量);

(4) 若按行存储时,元素A14的第一个字节地址为。

3、已知二叉树结点的先序序列是ABCDEFGHIJ,中序序列是CBAEFDIHJG,请画出这棵二叉树。

4、试给出下图所示的有向图的邻接表和邻接矩阵。

5、试给出下图所示的有向图的邻接表和邻接矩阵。

答:

6、已知一组元素为(38,52,25,74,68,16,30,54,90,72),画出按线性表中元素的次序生成的一棵二叉排序树,并求出其在等概率的情况下查找成功的平均查找长度。

7、利用普里姆算法,求下图对应的最小生成树。

答:

8、已知一组元素为(46,25,78,62,12,37,70,29)画出按线性表中元素的次序生成的一棵二叉排序树,并求出其在等概率的情况下查找成功的平均查找长度。

算法分析题

1、语句频度

(a)设n为正整数,试确定下面程序段中前置以记号@的语句的频度。

x=91; y=100;

while (y>0) {

@ if (x>100) {x-=10; y--;}

else x++;

}

语句频度为:

(b)设n为正整数,试确定下面程序段中前置以记号@的语句的频度。

x=n; y=0;

while (x>=(y+1)*(y+1)) {

@ y++;

}

语句频度为:

(c)设n为正整数,试确定下面程序段中前置以记号@的语句的频度。

i=1; j=0;

while (i+j<=n) {

@ if (i>j) j++;

else i++;

}

语句频度为:

2、顺序表操作

(a)已知L是采用顺序结构存储的线性表,试完成删除表中第i个数据元素的算法。Status ListDelete_Sq(SqList &L,int I,ElemTyep &e) {

if ( ) return ERROR; //表空

if ( ) return ERROR; //删除位置不合法

e=L.elem[i-1];

for (j=i-1;j<=L.length-1;j++)

//元素后移

L.length--; //表长减1

return OK;

}

(b) 已知L是采用顺序结构存储的线性表,试完成在第i个数据元素之前插入一个数据元素的算法。

Status ListInsert_Sq(SqList &L,int i,ElemTyep e) {

if ( ) return ERROR; //插入位置不合法

if ( ) return ERROR; //表满

for (j=L.length-1;j>=i-1;j--)

//元素后移

L.elem[i-1]=e;

L.length++; //表长增1

}

3、简述下面算法的功能。

(a) Status alto(Stack S, int e) {

Stack T; int d;

InitStack(T);

While (!StackEmpty(S)) {

Pop(S,d);

if (d!=e) push(T,d);

}

While(!StackEmpty(T)) {

Pop(T,d);

push(S,d);

}}

算法功能为:

(b)void BB(LNode *s, LNode *q) {

p=s;

while (p->next!=q) p=p->next;

p->next=s; ]//BB

void AA(LNode *pa, LNode *pb) {

//pa和pb分别指向单循环链表中的两个结点

BB(pa,pb);

BB(pb,pa); }//AA printf(x);

}

算法功能为:

(c) Status A(LinkedList L) {//L是无表头结点的单链表

if (L&&L->next) {

相关文档
最新文档