![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
新编数据结构与算法
、、、、南山小雨、、、、
秋风吹湘水,落叶满南山.
展开
-
动态数组C++实现
vector是用动态数组实现的,所谓动态是指当存储在数组中的元素个数接近数组的容量时,vector机制会另外malloc一片空间,此空间的大小是原空间的两倍,然后再将原空间的数据复制过来,最后将原空间释放,这就是vector全部的机制。具体实现是结构体加上一些维护这些结构体的接口。以下实现方式是STL中的vector实现方式。serverExe : try_Vector_main.o try_Vector.o g++ -o Exe try_Vector_main.o try_Vector.o.原创 2021-11-06 09:27:02 · 359 阅读 · 0 评论 -
C++链表实现
list和vector都是Sequence类型,不同的是vector的每个元素在内存中的地址位置是挨个连续的,list则不必需要连续的空间。它之所以是sequence是通过串联一个个结点实现的,每个结点包含用户存储进的元素与指向下一个元素的指针。如果是双向链表,还包括指向前一个结点的指针。本节实现的是单向list,具体实现是两个结构体和维护这两个结构体的函数。#include <string>#include <iostream>using namespace std;.原创 2021-11-05 08:37:15 · 159 阅读 · 0 评论 -
C++选择排序
如果你已经熟悉了上一节01、冒泡排序代码 +讲解,那么这一节对你来说很容易,因为选择排序像是冒牌排序的优化版本,在第二次循环中,它减少了每次比较满足条件后,两个值的交换过程。它直接用一个值存储当前最小值在数组中的下标,让此值作标准值跟待比较的值比较。不多说了,这个看代码更直观。相对于冒泡排序,步骤更少一点,也不需要来回的赋值交换,因此是优化版本的冒泡排序。#include <iostream>#include <string>#include <stdlib.h&g.原创 2021-11-04 11:56:41 · 114 阅读 · 0 评论 -
C++快速排序
若按左小右大的方式排序,它首先选择最左边为基准值,然后定义int i,j两个下标变量,i指向左数第二个数,j指向最后一个数。总体上来说排序的业务就是,让 i 左边的值都比基准值小,j 右边的值都比基准值大,然后i 向右移,带动 j 向左移。具体业务:全部由i指向的数来跟基准数比较,若小于基准值,i++ 。若大于则i位置的数与j位置的数互换,换后j-- ,i并不加一,因为此时 i 位置的数依然有可能大于基准值,因此再比较一次。此时依然有两种情况跟上所述一样(注意这时 j已将向左移动一位了)。接下来若.原创 2021-11-03 08:30:57 · 111 阅读 · 0 评论 -
C++插入排序
按照左小右大的顺序排列,若左边的前X个元素在排序之前已经有序,那么将X + 1位置的元素与X位置的元素比较,有两种情况,若它比X位置元素大,那么它的位置固定不变;若它小于X位置的元素,那么将它和X位置元素位置互换。换后再将X位置元素与X - 1位置元素比较,按刚才的方式一直下去,直到前X + 1位有序为止。这时再将X + 2与X+ 1比较,按照刚才的方式。这样下去直到全部有序。前面我们设置了X,现在我们把这个X值为1, 那么前一位肯定是有序的了。所以任何序列都可以用插入排序#include #inclu原创 2021-11-02 08:24:22 · 107 阅读 · 0 评论 -
C++冒泡排序
如果你已经学会C,C++(或看过《C++Primer》)的基本语法,想要再精进一层的话,那就是该接触数据结构与算法的时候了,这个系列博文的主题亦如此,所提供的代码都是在学习这些的过程中,自己写的代码,且亲测有效。无数前辈说过,程序 = 数据结构 + 算法,数据结构就是内存对数据的存储方式,算法就是对数据的加工处理。那么对于超大量的数据,为了管理他们,为了以后好取出想要的值,对他们的加工处理基本上都是按照各种排序方式,排来排去。《Effictive C++》赞美之音飘于四海,这本书的中文翻译者侯捷,他老原创 2021-11-01 09:14:04 · 116 阅读 · 0 评论