数据结构初阶
文章平均质量分 97
C语言实现初阶数据结构
炸掉地球
已有的事,后必再有;已行的事,后必再行。
展开
-
【数据结构】栈(Stack)和队列(Queue)
栈和队列都是一种特殊的线性表。栈的特点:后进先出,只能在表尾进行插入和删除。队列的特点:先进先出,只能在表头删除,在表尾插入。它们都可以用顺序存储和链式存储的方式。栈常用顺序存储结构即数组的方式,因为数组的尾插尾删效率高,但可能会存在频繁开辟内存空间和内存空间浪费的问题。而栈的链式存储结构,解决了空间浪费的问题,但每个节点都存放一个指针域,也会存在一定的内存开销,并且在每次申请和释放节点的过程中也存在一定的时间开销。队列常用链式存储结构即链表的方式,原创 2024-05-09 17:00:00 · 2037 阅读 · 5 评论 -
【八大排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序
对这八种算法进行性能测试,随机生成10万个数据,统计排序所消耗时间如下:可以看出,三种基本排序:插入排序、选择排序、冒泡排序所花费的时间明显更多。它们的时间效率都是O(N2),但是它们的效率却有明显差别。插入排序最快;选择排序扫描一遍数组,只需要换两次位置;而冒泡排序需要不断交换相邻的元素。因此,选择排序在大型数据集中的性能比冒泡排序更好。剩下五种排序算法跟它们不是一个量级,数据量太小看不出明显差别,我们单独用100万个数据来测试这五种排序算法的性能。计数排序最快,但是计数排序的使用场景也有限。原创 2024-05-14 17:00:00 · 1836 阅读 · 12 评论 -
【数据结构】堆(Heap)
堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组中。满足任意结点的值都大于等于左右子结点的值,叫做大堆,或者大根堆;反之,则是小堆,或者小根堆。原创 2024-05-13 17:00:00 · 1092 阅读 · 11 评论 -
【数据结构】二叉树(Binary Tree)
二叉树是一种特殊的树,每个结点最多只能有两个子结点,即二叉树不存在度大于2的结点。二叉树可以分为三个部分:根、左子树、右子树,每颗子树又可以划分为这三个部分,一直递归到叶子结点,叶子结点是其本身的根结点。二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。原创 2024-05-11 17:00:00 · 231 阅读 · 10 评论 -
【数据结构】单链表和双链表
1.通过本篇,掌握不带头单向非循环链表和带头双向循环链表之后,大概也能类推写出其他六种链表结构。2.不带头的链表传参数需要二级指针来接收,因为函数中可能会改变头结点(第一个结点)的值,例如链表为空时的操作。带头的链表传参时只需一级指针接收即可,因为并不会改变头结点(哨兵位头结点)的值。3.双向链表插入删除操作时,如果不事先保存结点的前后结点,则需要注意链接顺序,否则会找不到原来的结点。4.在pos位置进行删除操作时,要么传入二级指针置空,要么在外部调用函数完自行置空,否则会形成野指针。原创 2024-05-06 21:59:49 · 1104 阅读 · 5 评论 -
【数据结构】顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,这种存储结构称为顺序存储结构。顺序表一般情况下采用数组存储,在数组上完成数据的增删查改等基本操作。原创 2024-05-04 21:33:42 · 1044 阅读 · 3 评论