![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
数据结构 算法简介和实战
Bubblegirl123
这个作者很懒,什么都没留下…
展开
-
13-整数划分
整数的划分相关问题:有一个桶放了n升水 给了若干个桶 每个桶的容量是n升,每次可以往桶里倒一升或者两升或者整数升 问有多少种倒水的方法?n是被划分的整数 m是它的加数 它的加数不会超过n即n=6 而m=8是没有意义的 这个时候m相当于是6 最多就只有六个数相加得到6对于q(6,6)=1+q(6,5)即除过了6那个式子 然后后面都加上对于第四个的证明:代码实现:int fun(in...原创 2020-04-02 19:56:48 · 127 阅读 · 0 评论 -
12-全排列问题
全排列问题算法解释:画出树形结构如下:实现思路:可以用交换来实现–定义k,m 指数组的下标 当k=m的时候说明局部规模为1,即排列完成。所以给一个j 进行排列的时候 将k和j指向的值进行交换首先是1和1交换 然后对2,3进行全排列j++ k和j交换 即1和2交换 那么排列的数据就是1,3以此类推代码实现:void swap(int &a, int &b)...原创 2020-03-31 11:14:53 · 327 阅读 · 0 评论 -
11-基数排序&所有排序算法
基数排序&所有排序算法基数排序所有排序算法基数排序唯一一种不需要比较的排序 需要多个权重类似1234的百位千位 把相同的权重放在一起,达到在相同的权重上是有序的。//求最大值的位数int GetWidth(int *arr, int len){ int max = arr[0]; for (int i = 1; i < len; ++i) {...原创 2020-03-27 19:54:03 · 124 阅读 · 0 评论 -
10-快速排序
快速排序原理:参考资料:https://blog.csdn.net/nrsc272420199/article/details/82587933快速排序,说白了就是给基准数据找其正确索引位置的过程.先找一个基准,通过比较将待排序分成两部分,前半部分都比基准小,后半部分都比基准大,递归着用快速排序处理基准的前半部分和后半部分快排的优化:1.选取数据的第一个2.随机选择3.三位取中(第一...转载 2020-03-26 10:49:14 · 221 阅读 · 0 评论 -
9-堆排序&二路归并排序
堆排序建堆:1.从最后一颗子树开始向上处理2.每次处理过程都是从要处理的子树的根节点开始向下比较堆排序先把队列做成大堆,即父节点大于所有子节点再将做好的大堆排序。一次一次将最大的节点(根节点)往后方,然后再做大堆。//大堆void FilterDown(int *ar, int start, int end){ int i = start, j = i * 2 + 1;...原创 2020-03-25 18:57:36 · 197 阅读 · 0 评论 -
8-直接插入排序&希尔排序
直接插入排序&希尔排序直接插入排序希尔(shell)排序 :直接插入的优化直接插入排序时间复杂度:无序O(n^2) 有序O(n)空间复杂度:O(1)算法稳定性:稳定原理:把一个元素按升序或(降序)插入已经有序的一个序列里面,插入后保持序列的有序。假设有序列arr[1…n],则将arr[2]插入arr[1…1]中,将arr[3]插入arr[1…2]中,将arr[4]插入arr...原创 2020-03-23 22:07:39 · 115 阅读 · 0 评论 -
7-冒泡排序&选择排序
十大排序算法详解冒泡排序:挨个挨个去比较时间复杂度:O(n^2)空间复杂度:O(1)算法稳定性:稳定原理:从数组的第一个位置开始两两比较arr[j]和arr[j+1],如果arr[j]大于arr[j+1]则交换他两个的位置,直到数组结束;从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束;从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束;例:4...原创 2020-03-23 13:11:28 · 191 阅读 · 0 评论 -
6-栈&中缀转后缀
栈概念栈,同样是一种特殊的线性表,是一种Last In First Out(LIFO)的形式,现实中有很多这样的例子,比如:食堂中的一叠盘子,我们只能从顶端一个一个的取。栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。栈的特性:先进后出 后进先出栈的基本操作包括创建栈、销毁栈、出栈、入栈、获取栈顶元素、获取栈的大小、清空栈。stack.h#pragm...原创 2020-03-22 11:24:59 · 145 阅读 · 0 评论 -
5-队列
队列:先进先出 头删尾插循环队列:判断顺序队列 空还是满 --用空一个位置来判断一开始就空出一个位置,尾+1=头即满优先级队列:出数据时,有两个权重–》优先级、顺序 (用堆来实现 最大堆将最大的元素出出去)双端队列:头删头插 尾删尾插都可以 --从两头去操作受限的双端队列:从两头出 但是只能从一头插 或者从两头插 一头出队列实例:queue.h#pragma once...原创 2020-03-21 12:44:14 · 144 阅读 · 0 评论 -
4-双向链表
单向链表的缺点单向链表相对数组来说已经有很多优点了,但是,它还有一个最大的弊端,那就是我们可以轻松的到达下一个节点, 但是回到前一个节点是很难的. 但是, 在实际开发中, 经常会遇到需要回到上一个节点的情况,这种特性在进行数据操作时,会大大浪费时间,鉴于此,出现了双向链表的概念。双向链表就是具备两个方向的指向,无非就是每个结点成了两个指针。每个数据节点有一个数据域两个个指针域 不光从前向后检...原创 2020-03-20 10:55:35 · 320 阅读 · 1 评论 -
3-循环链表
循环链表没有头结点 只有头指针,由头指针指向循环链表中的任意一个结点(指向谁 谁就是头节点)多用于双向循环链表:头结点的前驱指针指向最后一个结点尾结点的后继指针指向头节点一般都会把头结点写上main.cpp#include "pch.h"#include <iostream>#include"CirList.h"int main(){ CirLis...原创 2020-03-19 11:23:38 · 883 阅读 · 0 评论 -
2-单链表
链表每个数据节点除了保存数据以外,还至少有一个指针域存储下一个节点的地址单链表每个数据节点有一个数据域一个指针域 只能从前向后检索每个元素都是一个对象,每一个对象有一个关键字 val 和一个指针 next(对象中还可以有其它的辅助数据 / 卫星数据);x 为链表的一个元素,x.next 指向它的后继元素;如果 x.next = NIL,则元素 x 没有后继元素,是链表的最后一个元素(即...原创 2020-03-18 09:55:34 · 126 阅读 · 0 评论 -
1-定长的顺序表&不定长顺序表
存储结构顺序存储结构:逻辑上连续,物理存储上也连续链式存储结构:逻辑上连续,物理存储上不连续顺序表–操作数据顺序表是在计算机内存中以数组的形式保存的线性表。顺序存储:类似于数组,顺序表比数组多带一个元素来记录存储的元素个数count定长顺序表定长顺序表 —》类似于数组不定长顺序表—》C++的STL vector数组适用于值比较固定的情况 存储数据数组没有成套的方法计数法:(...原创 2020-03-17 13:15:06 · 232 阅读 · 0 评论