C语言实现数据结构
文章平均质量分 61
以C语言实现数据结构
Claus-
所有代码可以访问我的gitee库https://gitee.com/xiang-hao2004
展开
-
插入排序学习
就像我们打扑克时,将刚从牌堆中拿出的牌按序插入已经排好的队伍中,这就是典型的插入排序。原创 2024-09-04 22:33:06 · 334 阅读 · 0 评论 -
顺序表的学习与应用
3.2可增加保存通讯录和载入通讯录功能(下面代码都已经实现,可访问我的gitee链接获取。原创 2024-08-23 21:24:12 · 433 阅读 · 0 评论 -
快速排序-前后指针法和左右指针法
快速排序是先任取数组中的一个元素作为基准值(一般是首或者尾),遍历一遍数组,让比大的在其右边,比他小的在其左边,这样就完成了基准值的定位,再将其右边和左边的分别重复上操作,完成排序。原创 2024-09-11 09:48:06 · 315 阅读 · 0 评论 -
交换排序(冒泡排序和快速排序)
冒泡排序的底层逻辑是依次比较相邻的两个数,如果前者大于后者就交换位置,完成一次遍历后数组中的最大值就到了最高位置,再改变区间遍历,依次下去就完成了排序。原创 2024-09-07 21:22:39 · 232 阅读 · 0 评论 -
二叉树基础学习(分治和遍历)
1.1满二叉树:除去二叉树的叶节点,其余节点都达到满状态,即为满二叉树。如图1.2完全二叉树:除了最后一层,其余层都是满的,最后一层节点是从左向右连续的。如图。原创 2024-09-02 15:00:03 · 481 阅读 · 0 评论 -
合并排序(C)
如果将一个数组分成两份,让其左和右区间分别有序,那么只需要我们新开辟一块空间,让左区间和右区间的依次比较,顺次取小的数放入新空间中,完成后再拷贝入原数组即可。如果是一个完全的无序数组呢?那么我们只需要继续分成小块进行排序 ,将左区间和右区间分别再分,值到分到不可分的小块为止,再在每块小块中进行比较。原创 2024-09-11 16:43:42 · 124 阅读 · 0 评论 -
链表的学习
1.1在上一篇文章中介绍的顺序表很明显存在一些问题:①顺序表中间和头部插入数据时需要遍历数组,时间复杂度为O(N)②realloc在栈区上扩容时底层逻辑是:如果需要扩容的空间后面有足够的空间在原空间的基础上接上,如果空间不够,则需要重新开辟一块空间,再将原空间的数据复制上,再释放原空间,会有内存和时间上的消耗③顺序表在后期以两倍的大学扩容时,容易造成空间的浪费。只有一个节点时直接释放掉就完事,当多个节点时需要找到尾节点的上一个节点,将尾二节点中的next指针置为空,再将尾节点释放掉。原创 2024-08-26 15:25:39 · 707 阅读 · 0 评论 -
选择排序算法
1.直接选择排序的逻辑较为简单,但是效率较低,不管数据的初始排序状态如何,时间复杂度都为O(N^2),实际上很少使用.2.实现逻辑实际上就是遍历数组,找出最小数据,再将其与头位置交换数据。具体可看下图3.代码。原创 2024-09-05 23:01:46 · 201 阅读 · 0 评论 -
栈和队列的学习
栈是一种特殊的线性表,他只能在指定位置进行数据的插入和删除,栈中的元素遵循后进先出(LIFO)的逻辑,即后面进入的元素如果要出数据的话先出。进行数据插入的一段叫做栈顶,另一段叫做栈底。其操作逻辑可以看下面两张图。原创 2024-08-31 19:04:15 · 336 阅读 · 0 评论 -
双向链表的学习
双向链表即是双向带头循环链表,这里的头是一个哨兵位,即只是为了方便后续操作的一个节点,不实际存储数据。相较于单链表,双链表实习这些函数更加简单,因为可以轻松找到尾节点(phead->prev),和任意一个节点的前一个节点。没个节点由三部分构成①LTData(存储数据)②prev(前位置指针)③next(后位置指针)原创 2024-08-29 22:51:26 · 445 阅读 · 0 评论 -
时间复杂度和空间复杂度的计算
空间复杂度即算法的空间效率,他是对临时占用存储空间大小的度量。变量个数的累加,为空间复杂度,也用大O的渐进表示。大O的推导:①算出具体执行次数(按照最坏结果计算)②用常数1代替所有的加法常数③只保留最高项④最高阶项不是1的化为1.时间复杂度即程序运行的时间效率,算法中的基本操作的执行次数的累加,为算法的时间复杂度(用O的渐进表示)。上述冒泡算法共运行(n-1)*n/2次,即是n*n/2-n/2次。用大O的渐进表示就是为O(N)例题,同上述例题:共建立6个变量,O(1)为其空间复杂度的表示。原创 2024-08-21 11:07:56 · 287 阅读 · 1 评论