几道面试题

面试者1:
第一轮
1. Implement a LinkedList that can add and delete nodes.
第二轮
2. Given a sorted integer array, remove duplicate items, return the count of distinct items.

 

面试者2:
第一轮
1.将一个整数转换成二进值数值后1的个数。例如0->00000000返回0
5->00000101返回2
2.压缩算法,将一个数组中重复的数字删除,并返回新数组的长度
3.multithread中critical session和mutex的区别
第二轮
1.CompactArray
删除一个有序数组中所有重复的数字,例如1 1 1 2 3 4 5 5 6 输出1 2 3 4 5 6

2.NumberOfTrue
返回一个整形数字对应的二进制数字中的1的个数,例如:0(00000000) 输出0
2(00000010)输出1
5(00000101)输出2


面试者3:
1. Write out an implementation of Linked List using C#, containing the following actions: add, remove; containing the following properties: count.
 
2. Assume you have two arrays with integer elements, a[] and b[]. array a has m elements, array b has n elements, array a has enough spaces to contain all elements that from array a and array b, write a function to merge the array b to array a, as well as removing the duplicated elements from array b to array a. using the following prototype. array a and array b are sorted ascending.
 
int MergeArray(int a[], int m, int b[], int n);
 
3. Write a function to remove all duplicates in a single array which is sorted ascending. using the following prototype.
 
void CompactArray(int a[], int length)
 
4. Given an integer array, find out the 2 maximum numbers from this array.
 
NOTE: all implementations to the questions need to be optimized mostly.


面试题目
what do you do in your team
how do you like your work,
design and refactoring which do you like
1.一个textfile,里面有很多字符。使用;分割每个部分,写代码读取这个文件,实现Addition, Modification, Deletion操作,并且存储到文件中
例如 aa;bb;增加一段(cc)变成aa;bb;cc;
2.select the 41st top record of a table
3. diffenent between viewstate and session

<think>嗯,用户让我根据C语言的数据结构出几道面试题,并且给出答案。首先,我需要确定用户的需求是什么。他们可能是正在准备面试的求职者,或者是面试官需要题目来考察候选人。不管怎样,题目需要覆盖C语言中常见的数据结构,同时难度要适中,既有基础题也有稍微复杂一点的题目。 首先,回忆一下C语言中常用的数据结构有哪些。基础的有数组、链表、栈、队列,然后是树、图,以及哈希表、堆等。考虑到面试题的常见性,链表、树、栈、队列这些应该是重点。此外,算法题通常会结合这些数据结构,比如反转链表、二叉树遍历等。 接下来要考虑题目的类型。用户可能希望有代码实现题,也有一些理论题,比如时间复杂度或者结构定义的题目。不过根据之前的例子,用户提供的SQL题都是需要写代码的,所以可能更偏向于编程题。不过数据结构题除了代码实现,也可能涉及概念性问题,比如优缺点比较。 然后,我需要设计每个问题,确保覆盖不同的数据结构。例如,链表可以出反转链表的问题,树可以出遍历或者验证二叉搜索树,栈和队列可以出实现或用栈实现队列,哈希表可以出设计题目,堆可以涉及优先队列的实现,图的话可能最短路径或者遍历,但图的问题可能比较复杂,可以作为进阶题。 接下来,每个题目需要参考答案,并且答案要准确。例如,反转链表的递归和迭代方法,二叉树的中序遍历递归和迭代,设计哈希表需要考虑冲突处理的方法,比如链地址法或者开放寻址法。 还要注意题目的难度梯度,从基础到中等,避免一开始就太难的题目,让用户逐步深入。比如先链表、栈,然后树、哈希表,最后堆和图。 另外,用户可能希望题目能够考察面试者对内存管理的理解,因为C语言需要手动管理内存。所以在链表或树的问题中,可能需要考虑内存分配和释放,比如在代码实现中是否处理了动态分配的内存。 还要考虑到边界条件,比如空指针、单节点链表等,这些在参考答案中也需要体现,确保代码的健壮性。 最后,总结部分需要指出考察的重点,比如指针操作、递归、内存管理等,帮助用户理解每个题目背后的考察点。 现在,具体想每个题目: 1. 反转单链表:经典题目,迭代和递归两种方法,考察指针操作和递归理解。 2. 用栈实现队列:考察对栈和队列特性的理解,以及如何用两个栈模拟队列。 3. 验证二叉搜索树:需要理解BST的定义,以及如何通过中序遍历或递归验证每个节点的值范围。 4. 设计哈希表:考察哈希表的基本实现,包括哈希函数、冲突处理,链地址法的应用。 5. 合并两个有序链表:同样经典,考察链表操作和递归/迭代方法。 6. 二叉树的中序遍历:递归和迭代实现,特别是迭代需要使用栈,考察对遍历过程的理解。 7. 最小栈:在常数时间内获取最小值,需要辅助栈来跟踪最小值。 8. 循环队列的实现:考察队列的环形缓冲区实现,处理队空和队满的条件。 9. 堆排序:实现最大堆和堆排序过程,考察对堆结构的理解和排序算法的应用。 10. 图的最短路径(Dijkstra算法):较难,但可以考察对图结构和算法的掌握,适合高级岗位。 每个题目需要给出参考答案,并且确保代码正确,符合C语言的语法,比如指针的使用、结构体定义、动态内存分配和释放等。 在参考答案中,要详细注释,解释关键步骤,比如反转链表的三个指针移动,或者哈希表的冲突处理方式。 同时,要注意代码的健壮性,比如处理空指针,释放内存,避免内存泄漏,这在C语言中尤为重要。 最后,总结部分要指出每个题目考察的知识点,帮助用户理解这些题目的目的,比如链表题考察指针操作,二叉树题考察递归和遍历,哈希表考察数据结构设计能力等。 可能还需要检查是否有重复的考察点,确保覆盖不同的数据结构和算法,比如链表、栈、队列、树、哈希表、堆、图等,每个至少有一道题目。 现在把这些整理成结构化的题目和答案,确保清晰易懂,代码正确,注释到位,同时用中文回答,符合用户的要求。</think>以下是几道典型的C语言数据结构面试题及参考答案,涵盖链表、树、栈、队列等核心内容: --- ### **题目1:反转单链表** **要求**:用C语言实现单链表的反转(递归和迭代两种方法)。 **参考答案**: ```c // 链表节点定义 typedef struct Node { int data; struct Node* next; } Node; // 迭代法 Node* reverse_iterative(Node* head) { Node *prev = NULL, *curr = head, *next = NULL; while (curr != NULL) { next = curr->next; // 保存下一个节点 curr->next = prev; // 反转指针 prev = curr; // 前移prev curr = next; // 前移curr } return prev; // 新头节点 } // 递归法 Node* reverse_recursive(Node* head) { if (head == NULL || head->next == NULL) return head; Node* new_head = reverse_recursive(head->next); head->next->next = head; // 反转指向 head->next = NULL; // 断开原指针 return new_head; } ``` --- ### **题目2:用栈实现队列** **要求**:使用两个栈模拟队列的入队(`enqueue`)和出队(`dequeue`)操作。 **参考答案**: ```c typedef struct { int top; int data[100]; } Stack; typedef struct { Stack s1; // 主栈(入队用) Stack s2; // 辅助栈(出队用) } MyQueue; void enqueue(MyQueue* q, int val) { // 直接压入s1 q->s1.data[++q->s1.top] = val; } int dequeue(MyQueue* q) { // 若s2为空,将s1所有元素倒入s2 if (q->s2.top == -1) { while (q->s1.top != -1) { int val = q->s1.data[q->s1.top--]; q->s2.data[++q->s2.top] = val; } } // 弹出s2栈顶 return q->s2.data[q->s2.top--]; } ``` --- ### **题目3:验证二叉搜索树(BST)** **要求**:判断一棵二叉树是否为合法的二叉搜索树(左子树所有节点值 < 根节点值 < 右子树所有节点值)。 **参考答案**: ```c typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 辅助函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值