![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
阿维的博客日记
这个作者很懒,什么都没留下…
展开
-
二叉树的迭代遍历
二叉树的迭代遍历原创 2024-03-13 10:37:39 · 665 阅读 · 0 评论 -
图解KMP算法
图解KMP算法原创 2024-02-26 00:00:01 · 758 阅读 · 0 评论 -
大数运算-自己动手实现BigInteger-实现了减法,乘法,作商和求模
需要调整idea的对jvm的内存分配,否则容易out of memory!!实现了减法,乘法,作商和求模乘法不需要逆置数据,减法和除法需要逆置数据package 实验3;import java.math.BigInteger;import java.util.Arrays;import java.util.LinkedHashMap;import static java.lang.Integer.*;public class MyBigInteger { /** *原创 2021-12-27 11:32:28 · 450 阅读 · 0 评论 -
单链表插入删除输出释放内存
单链表插入 链表插入节点 单链表删除节点 链表删除节点 链表输出 链表输...原创 2020-05-01 11:57:26 · 673 阅读 · 0 评论 -
两个一元多项式的加法计算----单链表的应用
实验要求如下:实现两个一元多项式的加法运算。 要求:(1)设计函数 createPoly( ),建立一个以单链表形式表示的一元多项式,输入次序不限,但要求单链表中元素按指数递增次序排列(不能采用排序算法)。(2)设计函数 addPoly( ),实现任意两个多项 A 和 B 加法运算,相加结果在多项式 A 中。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。(3)...原创 2020-03-04 17:57:15 · 2354 阅读 · 4 评论 -
分治界限法(优先队列优化)求解单源最短路径,并输出源点到其他点的最近的路径
#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <fstream>#include <iostream>#include <istream>#include <iterator>#include <list>#include <map>#include &原创 2021-04-26 02:17:20 · 405 阅读 · 0 评论 -
n皇后-输出所有情况C++
#include <algorithm>#include <cmath>#include <cstring>#include <fstream>#include <iostream>#include <istream>#include <iterator>#include <list>#include <map>#include <queue>#include <原创 2021-04-23 20:01:09 · 312 阅读 · 0 评论 -
部分背包问题和最大相容活动-贪心算法
#include <iostream>#include <algorithm>#include <cstring>#include <fstream>#include <iostream>#include <istream>#include <iterator>#include <list>#include <map>#include <queue>#include &原创 2021-04-16 21:16:24 · 114 阅读 · 0 评论 -
动态规划解最长公共子序列LCS
#include <iostream>#include <string>#include <utility>#include <vector>using namespace std;/* CLion 使用提示 : 批量注释代码 => Ctrl + shift + / 格式化代码 => option + command + L 补全语句 => Shift + command + return 生成构原创 2021-04-12 09:05:11 · 84 阅读 · 0 评论 -
严蔚敏课后习题解答pdf下载,选择题带解析,解答题带代码!!!doc格式
严蔚敏课后习题解答,选择题带解析,解答题带代码!!!密码:1234原创 2020-12-25 17:16:11 · 155 阅读 · 0 评论 -
BFS+最短路径+邻接表C++
为了简化实现,我这里的权值默认都是1并且都是有向图,不是1的话,比较费劲,还没想到咋写因为默认权值都是1,所以BFS出来的第一个要找的末尾节点,的队列中就包含了最短路径,此时只需要从后往前遍历,找出前驱节点就万事大吉,因为我Node里面vertex1就保存了前驱节点,更具体的代码实现如下// 链表测试.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<list>#include<ve原创 2020-11-19 20:49:31 · 773 阅读 · 3 评论 -
40行代码2个栈模拟一个队列
思路已经在代码中#include <iostream>#include<queue>#include<stack>using namespace std;class Q {private: stack<int> s1; stack<int> s2;public : void push(const int& x) { s1.push(x);//添加元素时先把元素缓存在s1中 }原创 2020-11-14 19:15:14 · 74 阅读 · 0 评论 -
数组右移k位的2种算法
算法一:时间O(N),空间O(N)利用额外的空间b[N]来直接定位到指定的位置,这是它快的原因由于是循环右移,必然要%来循环,核心代码:b[(i + k) % n] = a[i];void move_it() { int n, k; std::cout << "输入数组大小n,右移k位\n"; std::cin >> n >> k; int* a = new int[n]; int* b = new int[n]; if (a == nullptr原创 2020-09-21 10:37:20 · 1037 阅读 · 0 评论 -
希尔排序代码详解
希尔排序一个重要性质:后使用的增量排序不会影响之前使用的增量排序也就是:h1-排序后,不会影响hk排序的成果,否则就是前功尽弃了。。后面排序摧毁了前面的劳动以Shell建议的序列ht【N/2】和hk【hk+1/2】为例。具体的代码实现如下:template<typename T>void shell_sort(T* array, unsigned int n) { unsigned int i, j, increment; T tmp; for (incre原创 2020-08-04 00:59:03 · 1372 阅读 · 0 评论 -
快速排序优化细节分析
快排思路:(Ⅰ)选取主元(Ⅱ)根据主元,划分子集,一次的排序后,左边元素<主元<右边元素(Ⅲ)然后在左边元素作为新的集合,对左集合进行再次进行快排,同理,对右集合快排,这样一直快排下去,如果无法进行3数中值法的快排了,就对小的集合进行插入排序。选取主元的分割策略是:选取中位数,交换一下位置,使得:A[Left]<=A[Center]<=A[Right],并把A[Center]和A[RIght]交换位置,目的是把枢纽元放到和子集划分无关的地方,方便划分子集下面开始排序原创 2020-08-03 11:04:16 · 320 阅读 · 0 评论 -
堆排序-图片+代码详解
一,堆的有序性使堆快速执行的性质是堆的有序性每个节点都大于或者小于其儿子节点的关键字结论:堆的插入和删除都是O(logN)数据结构入队出队普通数组O(1)O(n)顺序数组O(n)O(1)堆O(logN)O(logN)堆的结构性质:①堆是一棵被完全填满的二叉树,有可能的例外是在底层,底层上的元素从左到右被填入,这样的树称为完全二叉树容易证明:②一棵高是h的完全二叉树有2h到2h+1-1个节点,这意味着完全二叉树的高是O(logN)③堆中索原创 2020-08-01 22:30:41 · 466 阅读 · 0 评论 -
二叉搜索树的增删改查
#pragma once#include<iostream>using namespace std;class Tree {private: struct Node { int data; Node* left; Node* right; Node(int value=0):data(value),left(nullptr),right(nullptr){} }; Node* root; void insert(int key, Node*& o);//插原创 2020-08-01 11:33:05 · 282 阅读 · 0 评论 -
编译器出现Process returned -1073741819 (0xC0000005)以及编译器的异常警告,Linux的段错误总结
一,对空指针的访问再贴多一种类似情况,对指针解引用后,操作不属于自己的内存空间(0地址),0地址是不准许访问的!!!二,对只读空间的修改一种情况是这样的,对只读空间进行修改,也是不允许的,一改就会出错!!!直接崩溃另外一种就是使用了strcpy强行改变了常量字符串的内容这种就比较隐蔽了。。。单步调试是一种神器????三,动态内存二次free/delete我用C++写了链表类,然后将两个链表合并为1个,简单的将第一个链表的尾指针指向了第二个链表的头指针,然后析构了第二个链表之后,又析构了原创 2020-07-26 12:54:13 · 10535 阅读 · 0 评论 -
层次遍历-二叉搜索树
层次遍历二叉树①层次遍历的核心思想②图片示例说明③层次遍历代码树的头文件队列的头文件主函数输出结果①层次遍历的核心思想就是利用队列化二叉树结构为线性结构 , 先进的先输出 , 后来的后处理先把父节点入队 , 输出父节点 , 删除父节点 , 返回父节点指针 ,利用 指针 把左右儿子都入队接着把新得到的指针的左右儿子再次入队 , 输出以前的左儿子 ,然后到了以前的右儿子,把以前右儿子的两个儿子入队,重复此套路②图片示例说明③层次遍历代码树的头文件#ifndef TREE_H_INCLU原创 2020-05-23 13:04:40 · 578 阅读 · 0 评论 -
如何理解dfs-输出全排列问题?
DFS-深度优先搜索例题一:输出数的全排列例题二:????????????+????????????=????????????例题都是来自《啊哈!算法》,全排列的代码也是来自该书的(稍微改了一下)例题一:输出数的全排列以有6张牌为例,图示说明如下,我前面的那个标记性数组的元素只要前面标记成了true , 后面依次遍历这个bool数组的时候,只会把false元素放到盒子a里面,所以每次输出不同的牌而且就是因为你前面的dfs是放在循环里面的,所以会导致for里面又嵌套了for(其实看图就知道这个图是原创 2020-05-20 21:29:57 · 267 阅读 · 0 评论 -
各类排序分析汇总
7大排序①冒泡排序②选择排序算法分析:③插入排序算法分析:④希尔排序算法分析:⑤堆排序算法分析:堆排序原理时间复杂度:头文件(类声明)类实现主函数⑥归并排序(MergeSort)算法分析:分治算法:时间复杂度分析:编码注意:⑦快速排序(高度优化的快排)算法分析:时间复杂度:以下代码全部由C++实现 , 如果没学过c++ 可以把cout看成是printf , 是用来输出的函数①冒泡排序i是标记左边的数组元素的下标,标记元素A[i]== ,(同理j的作用也是如此)假设A[0]是最大的元素 ,所以先原创 2020-05-20 08:52:59 · 393 阅读 · 0 评论 -
栈-中缀变成后缀-C++实现
只给出具体的实现的函数 void Dispose(const HouZhui & source)Top()是删除(其实是下标下移)栈顶元素Top()是返回栈顶元素Push(char X) 是插入X到栈中void HouZhui::Dispose( const HouZhui & source ){ int i; for( i = 0 ; i < s...原创 2020-05-02 20:54:41 · 195 阅读 · 0 评论