【SEU 数据结构课笔记】 03 - 2021/03/15 - Assignment

Assignment - 使用单链表实现有序表合并

  • 生成两个集合 L a L_a La L b L_b Lb(无重复元素)
  • L a L_a La L b L_b Lb 按着升序排序(使用学过的方法)
  • L a L_a La L b L_b Lb 合并(升序)
  • 分析时间与空间复杂度

英文版报告

(英文版报告相对更加完整)
【SEU 数据结构】Data Structure (2021 Spring) - Report for Assignment 3

主体思路

先把非 this 的单链表拷贝一份,再通过修改后继指达到合并效果。

Tip: 注意判断是否有重复元素。

核心代码

TVJ_Forward_List.h 和 Sample.cpp 详见我的 GitHub Repository: https://github.com/Teddy-van-Jerry/TVJ_Forward_List
或者我的博客: https://blog.csdn.net/weixin_50012998/article/details/115029881

结果与分析

结果

MSVC
MinGW
单链表合并成功!

tvj::forward_list 类介绍

详见我的博客 https://blog.csdn.net/weixin_50012998/article/details/115029881

时间复杂度

这需要分 Release 模式和 Debug 模式:

Release 模式下不检查是否已排好序,直接合并,所需时间即拷贝和合并的时间,均与元素个数成正比,因而时间复杂度为 O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2)

Debug 模式下还需检查是否已排序以及未排序时调用 merge 函数排序(实际为归并排序),因而最好的时间复杂度为 O ( n 1 + n 2 ) O(n_1+n_2) O(n1+n2)而最差的时间复杂度即排序的时间复杂度为 O ( n 1 log ⁡ n 1 + n 2 log ⁡ n 2 ) O(n_1\log n_1 + n_2\log n_2) O(n1logn1+n2logn2)

空间复杂度

赋制、检查是否已排序、排序、合并都几乎不使用临时存储,因而空间复杂度为 O ( 1 ) O(1) O(1)

总结

写合并本身并不难,但是做到 exception 的 throw 以及各种操作较为困难。这个程序也借鉴了 C++ 标准库的内容。


ALL RIGHTS RESERVED © 2021 Teddy van Jerry
欢迎转载,转载请注明出处。


See also

Teddy van Jerry 的 CSDN 导航页
Teddy van Jerry 的 GitHub 主页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值