数据结构试题库,含答案
学习IT技术最多的就是练习题了,让理论与实践相结合,这样学习才是有效的,下面是华清的美女学霸,在一次次测试中,总结的常见的数据结构题,都是比较常见的哦,可以收藏来学习。
1. 选择题(共二十题,1~10题每题2分, 11~20题每题3分)
1. 数据结构通常研究数据的( )及运算。
A. 物理结构和逻辑结构 B. 存储和抽象 C. 理想和抽象 D. 理想与逻辑
2. 数据结构中,在逻辑上可以把数据结构分成( )。
A. 动态结构和静态结构B. 紧凑结构和非紧凑结构
D. 内部结构和外部结构
C. 线性结构和非线性结构
3. 若f(n)=3n2+2n+1, 则f(n)= ()。
B. O(n)C. O(2n)D. O(3n2)
A. O(n2)
4. 用单链表存储的线性表,存储的每个节点需要两个域,一个是数据域,另一个是(
)。
A. 当前节点的所在地址B. 后继节点的所在地址
C. 空指针域D. 空闲域
5. 设线性链表中节点的结构为(data, next),已知指针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;
6. 设线性链表中的节点的结构为(data, next),已知指针p所指的节点不是尾节点,若在*p之后插入节点*s,则应该执行()操作。
A. s->next=p; p->next=s;
B. s->next=p->next;p->next=s;
C. s->next=p->next;p=s;
7. 设线性链表中的节点的结构为(data, next),若想删除节点p的直接后继,则应该执行()操作。
A. p->next=p->next->next;
B. p=p->next; p->next=p->next->next; C. p->next=p->next;
D. p=p->next->next;
8. p指向线性链表中的某一节点,则在线性链表的表尾插入节点s的语句序列是()。
A. while(p->next!=NULL) p=p->next;p->next=s;s->next=NULL;
B. while(p!=NULL) p=p->next;p->next=s;s->next=NULL;
C. while(p->next!=NULL) p=p->next;s->next=p;p->next=NULL;
D. while(p!=NULL) p=p->next->next;p->next=s;s->next=p->next;
9. 一个栈的入栈序列为a,b,c,d,e,则出栈序列不可能的是()。
10. 如果以链表作为栈的存储结构,则出栈操作时()。
11. 如果以链表作为栈的存储结构,则入栈操作时()。
12. 在队列中存取数据的原则是()
A. 先进先出 B. 后进先出 C. 先进后出 D. 随意进出
13. 栈和队列的共同点是()
14. 判断一个队列sp为空的条件是()。
A. sp->front==sp->rear B. sp->front==sp->rear+1 C. sp->front==sp->rear-1 D. sp->front==NULL
15. 将含100个节点的完全二叉树从根这一层开始,每层上从左到右依次对节点编号,根节点的编号为1.编号为49的节点x的右孩子编号为()。
16. 先访问节点的左子树,然后访问该节点,最后访问节点的右子树,这种遍历称为(
)。
A. 中序遍历 B. 后序遍历 C. 先序遍历 D. 层次遍历
17. 一个具有767个节点的完全二叉树,其叶子节点个数为()。
18. 深度为 k 的完全二叉树中,最少有多少个结点()
A 2k-1-1B 2k-1C 2k-1+1D 2k-1
19. 对于二叉树的遍历算法,下面描述正确的是()
A void pre_order(bitree* root){//先序 printf("%d ",root->data);
pre_order(root->lchild);
pre_order(root->rchild);}
B void in_order(bitree* root){//中序 in_order(root->lchild);
in_order(root->rchild);
printf("%d ",root->data);}
C void post_order(bitree* root){//后序 post_order(root->lchild);
printf("%d ",root->data);
post_order(root->rchild);}
D void in_order(bitree* root){//中序 printf("%d ",root->data);
in_order(root->lchild);
in_order(root->rchild);}
20. 设指针变量 p 指向单链表中节点 A,若删除单链表中的节点 A,则需要修改指针的操作顺序为 ( )
A q= p->next; p->data = q->data;p->next = q ->next;free(q);
B q = p->next ;q->data = p->data;p->next = q->next;free(q);
C q = p->next;p->next = q->next;free(q);
D q = p->next;p->data = q->data;free(q);
2. 简答题(共3题,21题10分,22~23题各20分,编程题可忽略头文件)
21. 代码实现一个单链表的建立,头部插入,头部删除。
22. 代码实现一棵12个节点的完全二叉树
(1)递归实现节点的创建初始化。
(2)递归方法实现树的后序遍历。
(3)用顺序队列方法实现层次遍历。
23. 代码实现顺序循环队列的创建,入队,出队,测长,判空,判满,打印功能。