数据结构
文章平均质量分 90
w-w0w-w
这个作者很懒,什么都没留下…
展开
-
堆和二叉树
顺序存储的前提是完全二叉树,顺序存储就是使用数组来存储,类似顺序表的结构,因为完全二叉树的每个节点都是紧紧挨着,不会有空间的浪费,而且会有特殊的性质。二叉树这类的问题可以用递归快速解决,因为二叉树的特殊性质,二叉树可以分成根节点和左右子树,左右子树也可以分成根节点和左右子树,这个过程和递归相似,所以使用递归解决很合适。堆是一颗完全二叉树,堆分为大堆和小堆,父节点总是大于子节点的树是大堆,父节点总是小于子节点的树是小堆。子节点:一个节点具有子树的根节点,根节点称为该节点的子节点,如上图:B是A的子节点。原创 2023-10-14 10:54:48 · 99 阅读 · 1 评论 -
c++ string模拟实现
如果开的空间比n大,开n+1空间并拷贝_str的内容到tmp中,再把原空间释放让_str指向tmp,_capcaity=n+1。将str内容拷贝过去,size+=len(strcat在_str追加str内容时不会在末尾加'\0')//如果pos=0,cur-->size_t,需要将'\0'一起移动。//如果pos=0,cur-->size_t,需要将'\0'一起移动。(尾插会把最后的'\0'覆盖,所以要将最后一位变成'\0'//本来是_str自己开空间,让tmp给_str打工。原创 2024-01-30 19:18:32 · 1463 阅读 · 0 评论 -
AVL树插入详解
二叉搜索树可以提高搜索的效率,但是如果数据有序或者接近有序,就会退化为单边树,查找效率相当于在顺序表中查找数据,时间复杂度会退化到O(n)。AVL树解决了这个问题,通过保证每个节点的左右子树高度之差的绝对值不超过1,将时间复杂度保证在O(log2(n))左右。原创 2024-06-24 22:22:55 · 659 阅读 · 0 评论 -
二叉搜索树
如果该节点有左右孩子,需要使用替换法,将(最大左子树节点/最小右子树)节点的值,和该节点的值交换,然后删除最大左子树节点/最小右子树)节点。如果该节点只有左孩子,把这个节点的左孩子托付给该节点的父亲,然后删除该节点。如果该节点只有右孩子,把这个节点的右孩子托付给该节点的父亲,然后删除该节点。,因为需要通过引用指针去改变父亲节点的指向,如果调用。如果该节点没有左右孩子,直接删除该节点即可。原创 2024-05-21 11:47:34 · 355 阅读 · 0 评论 -
栈 和 队列
队列还需要指向。原创 2023-10-02 18:29:55 · 37 阅读 · 1 评论 -
顺序表和链表
如果我们想要存储数据,最常见的就是数据与数据之间一一联系,前一个数据和后一个数据相连,这种数据结构最后会像线一样连成一串,这种关系逻辑被称为线性结构,线性表根据物理结构分为顺序表和链表,顺序表的物理地址是连续的,链表的物理地址使用一根线连接。在挪动覆盖数据时注意:创建一个变量end用于遍历pos之前的元素,将end赋初值为pc->size,让pc->a[end] = pc->a[end + 1], 每次end++直到end<pc->size-1。扩容一般是以2倍空间扩容,会有一定空间的浪费。原创 2023-09-05 22:04:23 · 53 阅读 · 0 评论 -
结构体,位段,联合(c语言)
结构体成员可以是int, unsigned int, signed int或者是char(整形类型)位段的成员名后面有一个冒号和一个数字成员后面的数字单位是比特位位段和结构体相似,例如:structAchara:3;charb:4;intc:15;intd 24;原创 2023-08-15 23:24:25 · 76 阅读 · 1 评论 -
c语言字符串库函数的模拟实现
首先判断指针str2为空直接返回str1,如果str2不为空,初始化一个指针pc遍历str1所指向的字符串,每次遍历时分别使用s1和s2指针对比两个字符串是否相同。函数的形参的void*类型的,保证了可以接受各种类型的值,所以在使dest的值等于src的值要进行(char*)强转,以可以控制一个字节大小的数据。首先定义一个指针begin记住第一个字符的位置,再通过寻找'\0'的方法找到'\0'的位置,两个指针相减就是中间的字符串长度。6.memmove函数的模拟实现。5.memcpy函数的模拟实现。原创 2023-07-28 11:27:20 · 50 阅读 · 1 评论 -
插入排序详解
如果A1比较大:让A1向前挪动一位放在A2的位置,然后让tmp和A0比较,因为A0不存在,所以直接将第一个位置赋值为tmp。插入排序就是把待排序的元素插入到已经的序列中,直到所有的元素插入完全,就得到了一个有序序列。这里使用A1,A2,A3……代表第一个数,第二个数,第三个数。3.将A3,A4……依次插入,重复类似2步骤的操作。1.可以把A1直接看成有序列表,从A2开始排序。2.把A2和A1比较,使用tmp记录A2的值。如果A1比较小:直接让第二个位置赋值为tmp。例如:下面要排序:4 ,3,7,1。原创 2023-12-17 15:10:23 · 30 阅读 · 0 评论