南京大学2013年计算机系免试研究生上机测试题
南京大学2013年计算机系的免试研究生上机测试题主要涉及了一个C++编程任务,要求考生编写一个名为`remove_list_node`的函数,用于删除双向链表中的特定节点。这个题目考察了考生对C++语言的理解,特别是对数据结构——双向链表的操作,以及对函数设计、错误处理和测试用例设计的能力。 我们需要理解函数`remove_list_node`的原型: ```cpp Node *remove_list_node(Node *&h, int i); ``` 这里,`Node`是一个结构体,表示双向链表中的节点,包含一个整型值`value`和两个指向前后节点的指针`prev`和`next`。`h`是链表的第一个节点的引用,`i`是要删除的节点的索引,从1开始计数。 函数的目标是在链表中找到第`i`个节点并删除它,如果成功,返回被删除节点的指针,否则(如果链表中没有第`i`个节点)返回0。此外,通过参数`h`,调用者可以获取到删除指定节点后链表的新首节点。 在实现这个函数时,考生需要考虑以下几点关键问题: 1. **边界条件**:检查`i`的有效性,确保它在链表的长度范围内。 2. **链表操作**:删除头节点、尾节点和中间节点。对于头节点,需要更新`h`的指向;对于尾节点,需要更新前一个节点的`next`指针;对于中间节点,需要更新前一个和后一个节点的指针。 3. **空链表处理**:当链表为空时,应正确处理删除操作,通常返回0。 4. **鲁棒性**:函数应该能处理非法输入,例如负数的`i`或非常大的`i`。 在编写测试代码时,考生需要设计不同类型的测试用例来验证函数的正确性,包括: 1. **正常情况**:链表中包含多个节点,测试删除头、尾和中间节点。 2. **单节点链表**:测试删除唯一的节点,此时链表应变为空。 3. **空链表**:测试删除一个不存在的节点,函数应返回0。 此外,题目还强调了提交规范,考生需要将完成的`remove.cpp`文件放到指定的文件夹中,并且确保文件夹名和文件中只包含必要的代码,避免提交额外的测试代码。 这个上机测试题考察了考生对链表操作、函数设计、错误处理和测试策略的掌握,是评估计算机科学研究生候选人在实际编程问题解决能力上的一个典型例子。考生在解答此类问题时,不仅需要有扎实的编程基础,还需要具备良好的问题分析能力和测试思维。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
前往页