数据结构模拟考试题
- 格式:doc
- 大小:148.50 KB
- 文档页数:7
数据结构模拟考试题一
一、解答题(共30分)
1.(6分)已知一棵二叉树的后序遍历和中序遍历序列,求该二叉树的先序遍历序列。
后序遍历序列:DBGHFECA
中序遍历序列:BDACGFHE
2.(6分)设一无向图的邻接表如下:
写出从顶点J开始,分别进行“深度优先”和“广度优先”遍历的结果。
3.(8分)设有关键字集合K={18,22,44,13,20,36,25,44,35,51,41,15}采用散列存储结构,哈希表为HT[0…12],设哈希函数H(K)=K%13,用拉链法解决冲突,构造出相应的散列表。
4.(10分)假设用于通讯的电文仅由8个字母组成,字母在中文中出现的频率分别为:7,19,2,6,32,3,21,10。试为这8个字母设计哈夫曼编码。
二、填空题(每小题2分,共20分)
1.对于一个长度为n的顺序表,在表头插入元素的时间复杂度为( ),在表尾插入元素的时间复杂度为( )。
2. 已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是( )。
3. 在以first为表头指针的带表头附加结点的单链表和循环单链表中,链表为空的条件分别为:
( )和( )。
4. 设元素A,B,C,D,E依次进栈,若要在输出端得到序列A C D B E,则应进行的操作序列为Push(S,A),Pop(S), Push(S,B),Push(S,C),( ),( ), ( ),Pop(S),
Push(S,E),Pop(S)。
5. 线性结构的逻辑特征是( )。
6.折半查找技术适用于存储结构为( )的线性表,并且表中的元素必须是( )。
7.任何连通图的连通分量只有一个,即是( )。
8.已知一组记录为(46,74,53,14,26,38,86,65,27,34),用希尔排序(d1=5,d2=3,d3=1),第二趟的排序结果是( )。
9.已知一组记录为(46,74,53,14,26,38,86,65,27,34),用快速排序方法,第二趟的排序结果是( )。
10.数据结构的内涵包括( )、( )和( )
三、完善程序(共26分,每空2分)
1.以下是冒泡排序的算法,请填空完善程序。
void BubbleSort(int r[ ], int n)
{ int i,j,noswap;
int temp;
for(i=0; ;i++)
{ ;
for(j=n-2;j>=i;j--)
if( )
{ temp=R[j+1]; R[j+1]=R[j]; R[j]=temp;
noswap=0 ;
}
if( ) break;
}
}
2. 以下是顺序查找的算法,请填空完善程序:
int SeqSearch(int r[ ], int n, int k)
{
;
i=n;
while ( )
i--;
return i;
}
3. 以下是无向图基于邻接矩阵存储结构的深度优先遍历算法,从下标为v的顶点开始进行深度优先遍历,请填空完善程序:
template
void MGraph::DFSTraverse(int v)
{ cout<
;
for (j=0; j
if (arc[v][j]==1 && )
DFSTraverse( j );
}
4.以下是二叉链表为存储结构的二叉树的构造函数,“按完全二叉树层序遍历结果依次输入各结点名称,虚结点用@表示,结束用#表示”,请填空完善程序代码。
template
BiTree ::BiTree() { BiNode *s,*Q[Max];
T ch;
int front=1,rear=0;
root=NULL;
cout<<"按完全二叉树层序遍历结果依次输入各结点名称,虚结点用@表示,结束用#表示\n";
cin>>ch;
while(ch!='#')
{
s=NULL;
if( )
{ ;
s->data=ch;
s->lchild=NULL;
s->rchild=NULL;
}
;
if(rear==1) root=s;
else
{ if(s)
if( ) Q[front]->lchild=s;
else Q[front]->rchild=s;
if( ) front++;
}
cin>>ch;
}
}
四、编程题(24分)
1.(10分)链队列的类的定义如下:
template
struct Node
{ T data;
Node *next;
};
template
class LinkQueue
{ public:
LinkQueue();
~LinkQueue();
void EnQueue(T x);
T DeQueue();
T GetQueue()
{ if (front!=rear) return front->next->data;} bool Empty() { return front==rear? 1:0;}
private:
Node *front, *rear;
};
请写出其入队函数EnQueue(T x)和出队函数DeQueue()的算法代码。
2.(14分)顺序表的类定义如下:
const int MaxSize=100;
template
class SeqList
{
public:
SeqList( );
SeqList(T a[], int n);
~SeqList();
int Length();
T Get(int i);
int Locate(T x);
void Insert(int i, T x);
T Delete(int i);
void PrintList();
bool Empty();
private:
T data[MaxSize];
int length;
};
请写出其插入函数Insert(int i, T x)和删除函数Delete(int i)的算法代码。
数据结构模拟考试题二
一、解答题(共30分)
1.(6分)分别写出下图所示二叉树的前序、中序和后序序列。
2.(6分)设一无向网络的邻接矩阵如下:
0 3 5 8 0 3 0 6 4 11
A= 5 6 0 2 0
8 4 2 0 10
0 11 0 10 0
写出从顶点0开始,分别进行“深度优先”和“广度优先”遍历的结果。
3.(8分)设有关键字集合K={20,36,25,35,51,41,15, 18,22,44,13}采用散列存储结构,填充因子α=0.75,用线性探查法解决冲突,构造出相应的散列表。
4.(10分)假设用于通讯的电文仅由8个字母组成,字母在中文中出现的频率分别为:2,6,32,3,21,7,19, 10。试为这8个字母构造哈夫曼树,并求WPL。
二、填空题(每小题2分,共20分)
1. 在一般情况下,一个算法的时间复杂度是( )的函数。。
2. ( )可作为实现递归函数调用的一种数据结构。
3. 栈和队列是两种特殊的线性表,栈的操作特性是( ),队列的操作特性是( )。
4. 广义表((a), (((b),c)),(d))的长度是( ),深度是( ),表头是( ),表尾是( )。
5. 树是n(n≥0)结点的有限集合,在一棵非空树中,有( )个根结点,其余的结点分成m(m>0)个( )的集合,每个集合都是根结点的子树。
6. 设无向图G中顶点数为n,则图G至少有( )条边,至多有( )条边;若G为有向图,则至少有( )条边,至多有( )条边。
8.已知一组记录为(55,44,41,14,29,38,26,60,37,32),用希尔排序(d1=5,d2=3,d3=1),第一趟的排序结果是( )。
9.已知一组记录为(55,44,41,14,29,38,26,60,37,32),用快速排序方法,第二趟的排序结果是( )。
10. 与其他方法相比,散列查找法的特点是( )。
三、完善程序(共26分,每空2分)
1.以下是直接插入排序的算法,请填空完善程序。
void InsertSort (int r[ ], int n) {
for (i=2; i<=n; i++) {
;
j=i-1;
for (j=i-1; ;j--) {