当前位置:文档之家› 数据结构与算法期中考试题

数据结构与算法期中考试题

一、单选题, 从可供选择的4个答案中, 选择一个正确的答案, 将其前面的字母填写在( )中,共40分,每小题4分。

1.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p
之间插入s结点,则执行( )。

A.s->next=p->next; p->next=s;
B.q->next=s; s->next=p;
C.p->next=s->next; s->next=p;
D.p->next=s; s->next=q;
2.带头结点的单链表为空的判定条件是( )。

A.head= =NULL
B.head->next= =NULL
C.head->next= =head
D.head!=NULL
3. 若一棵完全二叉树中某结点无左孩子,则该结点一定是()。

A.度为1的结点B.度为2的结点C.叶子结点 D.分支结点
4.设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是( )。

A.a在b的右
方B.a在b的左方C.a是b的祖
先D.a是b的子孙5.在长度为n的线性表中查找值为x的数据元素的时间复杂度为:()。

A. O(0)
B. O(1)
C. O(n)
D. O(n2)
6.一个栈的入栈序列是a, b, c, d, e,则栈的不可能的出栈序列是()。

A. edcba
B. cdeba
C.debca
D.abcde
7.前序遍历和中序遍历结果相同的二叉树是()。

A. 根结点无左孩子的二叉树
B. 根结点无右孩子的二叉树
C. 所有结点只有左子树的二叉树
D. 所有结点只有右子树的二叉树
8.用顺序存储的方法将完全二叉树中的所有结点逐层存放在数组A[1] ~ A[n]
中,结点A[i]若有左子树,则左子树的根结点是()。

A. A[2i-1]
B.A[2i+1]
C.A[i/2]
D.A[2i]
9.对任何一棵四叉树T,如果其终端结点的个数为n0,度为2的结点个数为
n2,度为3的结点个数为n3,度为4的结点个数为n4,则()。

A.n0=n2+n3+n4+1
B.n0=n2+2n3+3n4+1
C.n0=n1+n2+2n3+3n4+1
D.没有规律
10.算法指的是()。

A. 对特定问题求解步骤的一种描述
B. 计算机程序
C. 解决问题的计算方法
D. 数据处理
二、填空题, 请将答案填写在题目的( )内。

(共24分,每小题6分)
1.在一个长度为n的顺序表的第i(1≤i≤n+1)个元素之前插入一个元素,需向后移动()个元素,删除第i(1≤i≤n)个元素时,需向前移动()个元素。

2. 权值为{2, 4, 1,7, 3,5}的叶子结点生成一棵哈夫曼树,其带权路径长度为()。

3. 已知一棵二叉树的前序遍历序列为ABCDEFGH,中序遍历序列为CDBAFEHG,该二叉树的后序遍历序列是()
4. 已知二叉链表的结点结构
lchild:左指针域,存储左孩子指针
rchild:右指针域,存储右孩子指针
请将Struct BiNode的定义填写完整。

template <class T>
struct BiNode
{ ;
;
;
};
三、阅读下列算法, 将合适的语句填写在________处, 使算法完善。

(共24分,每小题6分)
1.在线性表中查找元素x, 若找到x, 返回第一个找到的x的序号, 若找不到,返回0
const int MaxSize =100;
template < class T >//模板类 SeqList
class SeqList
{public

private:
T data[MaxSize]; // 存放数据元素的数组
int length; // 线性表的长度
};
template <class T>
SeqList<T>::Locate(T x)//在线性表中查找元素x,返回其在表中的序号{
for (int i=0; i<length; i++)
if
return i+1; //下标为i的元素等于x,返回其序号i+1
; //退出循环,说明查找失败
}
2.算法的功能是将一个十进制整数转换为二至九进制之间的任一进制数(用r表示)输出。

void Decimaltor(int num, int r)
{ top=-1;/采用顺序栈, 并假设栈不会溢出
While (num!=0)
{ ;
S[++top]=k;
;
}
While (top!=-1)
;
}
3. 循环顺序队列入队操作
const int QueueSize=100;
template <class T>
class CirQueue
{
public:
void EnQueue(T x);
private:
T data[QueueSize]; //存放队列元素的数组
int front, rear;
};
template <class T>
void CirQueue<T>::EnQueue(T x) //元素x入队列
{
if throw "队列已满";
;
; //在队尾处插入元素
}
4. 按中序遍历次序输出二叉树中的叶子结点的值
template <class T>
struct BiNode //二叉树的结点结构
{
T data;
BiNode<T> *lchild, *rchild;
};
template <class T>
class BiTree
{
public:
BiTree( ); //构造函数,初始化一棵二叉树,其前序序列由键盘输入 ~BiTree(void); //析构函数,释放二叉链表中各结点的存储空间private:
BiNode<T> *root; //指向根结点的头指针
};
template<class T>
void BiTree<T>::leaf(BiNode<T> *root)
{
if(root==NULL) return;
else{
;
if ;
;
leaf(root->rchild);
}
}
四、阅读下列算法, 指出算法的功能 (共12分, 每小题6分)
1.const int MaxSize =100;
template < class T >//模板类 SeqList
class SeqList
{
public:
SeqList ( ) {length=0;} // 无参构造函数
SeqList ( T a[ ], int n ) ; // 有参构造函数
void Insert ( int i, T x ) ; // 在线性表中第 i 个位置插入值为 x 的元素
T Delete ( int i ) ; // 删除线性表的第 i 个元素
int Locate ( T x ) ; // 按值查找,求线性表中值为 x 的元素序号
void PrintList ( ) ; // 遍历线性表,按序号依次输出各数据元素
int Length ( );//求线性表的长度
private:
T data[MaxSize]; // 存放数据元素的数组
int length; // 线性表的长度
};
void Abc( SeqList<int> &LA, SeqList<int> &LB ,Seqlist<int>&LD )
{
int n = LA.Length ( );
int m = LB.Length ( );
for ( int i = 1; i<=n; i++ )
{
int x = LA.Get(i);
LD.Insert(i,x);
}
for (int i=1;i<=m; i++)
{
int x=LB.Get(i);
int k = LD.Locate(x);
if ( k ==0 ) LD.Insert(LD.Length( )+1, x);
}
}
2. template<class T>
void BiTree<T>::DoSomething(BiNode<T> *root)
{
BiNode<T> *temp;
if(root==NULL) return;
else
{temp=root->lchild;
root->lchild=root->rchild;
rchild->rchild=temp;
DoSomething (root->lchild);
DoSomething (root->rchild);
}
}。

相关主题