2014数据结构(C语言)第1次作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构(C语言)作业一
一、单选题(每题2分,共20分)
1、下述哪一条是顺序存储结构的优点?___C____。
A.插入运算方便
B. 可方便地用于各种逻辑结构的存储表示
C. 存储密度大
D. 删除运算方便
2、一个栈的入栈序列为A,B,C,D,E,则栈的不可能的出栈序列是___D______。
A.ABCDE
B. EDCBA
C. DECBA
D. DCEAB
3、广义表(a,(b,c),d,e)的表头是 a 。
A. a
B. a,(b,c)
C.( a,(b,c))
D. (a)
4、在单链表指针为p的结点之后插入指针为S的结点,正确的操作时__C__为真值;
A.p->next=s;s->next=p->next;
B. s->next=p->next;p->next=s;
C. p->next=s;p->next=s->next;
D. p->next=s->next;p->next=s;
5、采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确
定结点所在的块时,每块应分为____B____个结点最佳。
A. 10
B. 25
C. 6
D. 625
6、若线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则采用_D___存储方式节省时间。
A.单链表B.双链表
C.单循环链表D.顺序表
7、下列排序算法中时间复杂度不受数据初始状态影响,恒为O(n2)的是___C_____。
A、堆排序
B、起泡排序
C、直接选择排序
D、快速排序
8、设无向图的顶点个数为n,则该图最多有_D____条边。
A. n(n-1)/2
B. n-1
C. n(n+1)/2
D. n2
9、一棵左右子树均不为空的二叉树在后序线索化后(不带头结点的线索化),其空指针域数为
_____B____。
A、0
B、1
C、2
D、不确定
10、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是____C____的二叉树。
A. 空或只有一个结点
B. 任一结点无左孩子
C. 高度等于其结点数(空树高度为0)
D. 任一结点无右孩子
二、填空作图解答题(第4小题6分,其余9分,共60分)
1.依次插入30,43,21,9,15,51并由空树构成一棵平衡二叉树,画出该平衡二叉树形成过程及
其中序线索二叉树。
2.已知广义表为((), ‘a’, (2,(‘c’,5,8)));试画出该广义表的存储表示。
3.对下面的数据表,写出采用希尔排序算法排序的每一趟的结果,并标出数据移动情况。 ( 125 11 22 34 15 44 76 66 100 8 14 20 2 5 1)
第一趟排序之后: {40,33,67,46,24,30}70{79}或{40,33,30,67,46,24}70{79} ;
第二趟排序之后: {30,33,24}40{67,46}70,79或{24,33,30}40{46,67}70,79 ;
若基准元素按“三者取中”的原则取,则两趟排序的结果是:
第一趟排序之后:
第二趟排序之后: ;
4.已知9个结点的值分别为1~9,请将各结点的值填入下面二叉排序树中:
5. 对下面的关键字集{30,15,21,40,25,26,36,37}若查找表的装填因子为0.8,采用线性探测再哈希方
法解决冲突
(1)设计哈希函数
(2)画出哈希表
0 1 2 3 4 5 6 7 8 9 10
(3)计算查找成功和查找失败的平均查找长度
查找成功时的平均查找长度=___ 6/4=3/2=1.5
查找不成功时的平均查找长度=____21/11
6. 已知一字符串bcbdebcecbdcabd ,试设计其赫夫曼编码并画出相应的赫夫曼树。
a :6;
b :7;
c :1;
d :3;
e :2;
f :4;
7. 在下面数组a 中链接存储着一个线性表,其表头“指针”为head==0,可利用空间表第一个元素的
“指针”av==5:
a data link
现在依次进行如下操作:1) 在元素56前插入元素78;2)删除元素60;3)删除25;4)在元素56后插入66;5)在元素66前插入88。请问,在进行上面操作后,av== 8 ,并将此时数组a 的内容填入下表:
三、 程序填空题(每空2分,共20分)
1. 下面是仅给出了部分操作的二叉树类的定义和实现。试在程序的每一划线部分填入一条语句或表达
式,完成计算度为1的结点个数的操作countNodes1( )。
typedef struct BinNode {
int data;
struct BinNode* leftchild, * rightchild;
}BinNode, *BinTree;
void InitBinTree(BinTree &root) //初始化二叉树root
{
root=Null;
}
void DestroyBinTree (BinTree &root) //销毁二叉树root
{
if (root == NULL) return;
DestroyBinTree(root->leftchild);
DestroyBinTree (root->rightchild);
free(root);
}
int countNodes1(BinTree &root) //计算二叉树root 中度为1的结点数
{
if ( ① root!=NULL_ ){
if(root-> leftchild!=NULL && root-> rightchild!=NULL)
__ ②return countnoders(root->leftchild)+countnodes(root->rightchild)___ __;
else if(root-> leftchild==NULL && _ _③_root->rightchild!=NULL ______ ___)
a
data link