试卷01
天津金海通软件笔试题
- 选择题(4*4=16)
- 对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为
- p->next=s; s->pri=p; p->next->pri=s; s->next=p->next
- p->next=s; p->next->pri=s; s->pri=p; s->next=p->next
- s->pri =p; s->next=p->next; p->next=s; p->next->pri=s
- s->pri=p; s->next=p->next; p->next->pri=s; p->next=s;
- 以下程序的输出结果是( )
void main()
{
char st[20] = “hello\0\t\\\”;
printf(“%d %d \n”, strlen(st), sizeof(st));
return;
}
A.9 9 B.5 20 C.13 20 D.20 20
- 若入栈序列的元素顺序为A,B,C,D,E,判断下列哪一个出栈序列是不可能的。
- A、B、C、D、E
- B、C、D、E、A
- E、A、B、C、D
- D、C、B、A、E
- 将长度为n的单链表链接在长度为m的单链表后面,其算法的时间复杂度采用大O形式表示应该是()
- O(1)
- O(n)
- O(m)
- O(n+m)
二、填空题(5*3+6=21)
- 有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当折半查找值为82的结点时,__________4_____________________次比较后查找成功。
- 用P表示入栈操作,D表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的P和D的操作串为_________________PDPPDPDD__________________________
- 头文件中的 ifndef/define/endif 干什么用____防止头文件的重复包含______
- Makefile根据文件的___________时间戳___________判断文件是否需要重新编译
- 折半查找的前提条件____________________序列有序_______________
- 假设以数组seqn[m]存放循环队列的元素,设变量rear和front分别指示循环队列中队尾的位置和队头的位置。(6)
- 如何判断队列为空、已满
- 如果计算队列中元素的个数
- 简答题(4*5=20)
- 写出下列序列一次快速排序的结果:[3, 1, 4, 1, 5, 9, 2, 6]
- 思考如何用两个栈实现一个队列,简述思路即可
- 已知一棵二叉树的先序和中序遍历序列:先序:A、B、C、D、E、F、G、H、I、J中序:C、B、A、E、F、D、I、H、J、G画出该二叉树
- 简述make工具的使用方式
四、编程题(43)
- 有如下定义的
struct Node{
int Value; //该 node 的值
struct Node * Next;//指向下一个 Node
}
请写一个函数,能够将输入的 Struct node 插入已有链表的末尾(7)
Void InserNode(struct Node* pList, struct Node* pInsertNode)
{}
- 写出折半查找的代码(8)
- 现已知单链表的头结点struct node *H; 写一个代码将单向链表逆置(10)
- 将原来的第一个结点变成最后一个结点
- 保存原来的第二个结点
- 循环头插(还需要再有一个指针保存下一个要头插结点的地址)
- 实现顺序栈的结构体、创建、入栈的代码(7)
- 现在有一个简单的工程项目,由main.c fun.c fun1.c和fun.h四个文件组成(且当前目录下只有这四个文件)。其main.c中包含主函数和fun.h的头文件,fun.c和fun1.c中为功能函数的实现,fun.h中为fun.c和fun1.c中功能函数的声明 。请写一个Makefile实现这几个文件的编译,提示Makefile提供的自动变量:$@所有目标、$^所有依赖、$<第一个依赖(11)
试卷02
蓝际网络笔试题
一、选择题(4*5=20)
1.下列关于存储结构和逻辑结构描述正确的是( )
a)存储结构和程序具体实现的语言没有关系
b)算法的实现需要考虑逻辑结构
c)逻辑结构就是实际的存储结构
d)算法的实现依赖于存储结构
2.一个栈的入栈序列是 a , b , c , d , e ,则栈的不可能的输出序列是( )
a ) edcba
b ) decba
c ) dceab
d ) abcde
3.一个算法的时间复杂度为 T ( n )=2n^3+3n^2+4n+5log2n+2,则该 T ( n )应记为
( )
a ) O ( n )
b ) O ( n ^3)
c ) O ( n ^4)
d ) O (log2n)
4.在一个完全二叉树中,编号为 i 的节点存在左孩子,则左孩子的编号是,设根节点编号为0( )
a )2i
b )2i-1
c )2i+1
d )2i+2
5.在链表指针为 p 的结点之后插入指针为 s 的结点,正确的操作是哪一项?( )
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 ;
二、简答题(40)
1.画二叉树写出先序遍历,后序: DBAEGHFIC 中序: DEBACGFHI (10)
2.算法的设计要求(5)
3.求下列结构体的大小,写出求解过程(默认64位操作系统对齐)(10)typedef struct{ char name[20]; struct { int day; char sex; short year; }p1; struct { short month; long num; }p2; }LibraryRecord;
4.用两个栈实现一个队列的功能?简述算法和思路(10)
5.求下列共用体的大小(默认64位操作系统)(5)
UnionA { int arr[5]; long int a; };
三、编程题(40)
1.写出程序删除单链表中的所有节点(10)
2.写程序,双向循环链表的结构体,及其头节点的创建和任意位置插入函数。(10)3.折半查找的前提条件是什么?写出折半查找的代码(10)
4.写出一个循环队列的结构体,该队列元素最多是 m 个。(10)
a )写出如何判断该队列为空的函数
b )写出如何判断该队列为满的函数
c )写出计算当前队列中的元素个数的函数