学习数据结构的小demo练习
通讯录[单链表实现]
fun.c
fun.h
main.c
停车场[链队列+顺序表+二维数组+广度优先搜索实现]
garage.c
garage.h
waitCar_linkQueue.c
waitCar_linkQueue.h
auxiliary_fun.c
auxiliary_fun.h
BFS_parking.c
BFS_parking.h
main.c
数据结构[顺序表]
seqlist.c
seqlist.h
main.c
数据结构[单向不循环链表]
linklist.c
linklist.h
main.c
数据结构[单向循环链表-约瑟夫环]
looplist.c
looplist.h
main.c
数据结构[双向循环链表]
doublelist.c
doublelist.h
main.c
数据结构[顺序栈]
seqstack.c
seqstack.h
main.c
数据结构[链栈-逆波兰表达式]
linkstack.c
linkstack.h
main.c
数据结构[链队列]
linkqueue.c
linkqueue.h
main.c
数据结构[循环队列(环形队列)]
seqqueue.c
seqqueue.h
main.c
数据结构[创建完全二叉树 二叉排序树插入/删除]
tree.c
tree.h
main.c
数据结构[插入排序:直接插入排序]
main.c
数据结构[插入排序:希尔排序(缩小增量排序)]
main.c
数据结构[交换排序:冒泡排序]
main.c
数据结构[交换排序:快速排序]
main.c
数据结构[选择排序:简单选择排序]
main.c
数据结构[选择排序:堆排序]
main.c
数据结构[归并排序]
main.c
数据结构[基数排序]
main.c
八大排序总结
从算法的简单性来看,我们将7种算法分为两类:
- 简单算法:冒泡、简单选择、直接插入。
- 改进算法:希尔、堆、归井、快逮。
从平均情况来看,是然最后3种改进算法要胜过希尔排序,并远远胜过前3种简单算法。
从最好情况看,反而冒泡和直接插入排序要更胜一筹,也就是说,如果你的待排序序列总是基本有序,反而不应该考虑4 种复杂的改进算法。
从最坏情况看,堆排序与归并排序又强过快速排序以及其他简单排序。
从这三组时间复杂度的数据对比中,我们可以得出这样一个认识。堆排序和归并排序就像两个参加奥数考试的优等生,心理素质强,发挥稳定。而快速排序像是很情绪化的天才,心情好时表现极佳,碰到较精糕环境会变得差强人意。但是他们如果都来比赛计算个位数的加减法,它们反而算不过成绩极普通的冒泡和直接插入。
从空间复杂度来说,归并排序强调要马跑得快,就得给马吃个饱。快速排序也有相应的空间要求,反面堆排序等却都是少量索取,大量付出,对空间要求是 O(1)。如果执行算法的软件所处的环境非常在乎内存使用量的多少时,选择归并排序和快速排序就不是一个较好的决策了。
从稳定性来看,归并排序独占整头,我们前面也说过,对于非常在乎排序稳定性的应用中,归并排序是个好算法。
有关C语言其他问题,欢迎您在底部评论区留言,一起交流~
- 作者:L_Z_J
- 链接:https://www.mcoi.top/article/Post-C-Data-Structures
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。










