
数据结构与算法
mazamu
沉迷学习无法自拔。
展开
-
链表实现大整数 加减法 一个节点保存四位数字(C++实现)
可用来熟悉数据结构与C++语言内容。#include<iostream>#include<vector>#include<algorithm>using namespace std;class node {public: node() { ch = ""; next = nullptr; } node(string a) { ch = a; next = nullptr;原创 2021-09-16 19:54:44 · 414 阅读 · 0 评论 -
堆排序简单代码实现C++版-巧记版
namespace jj01 { //小根堆 void adjust(vector<int>&vt,int i) { while(i > 0) { int u = (i - 1) / 2; if(i & 0x1) {//奇数节点 if(vt[i] < vt[u]) { swap(vt[i],vt[u]);原创 2021-08-25 21:46:02 · 116 阅读 · 0 评论 -
快速排序简单代码实现C++版-巧记法
int find_base(vector<int>&vt,int l,int r) { int tmp = l; while(l < r) { while(r > l && vt[r] >= vt[tmp]) r--; swap(vt[r],vt[tmp]); tmp = r; while(l < r && vt[l] < vt[tmp]) l++原创 2021-08-25 20:02:31 · 134 阅读 · 0 评论 -
归并排序简单代码实现C++版-巧记法
void merge(vector<int>&vt,int left,int mid,int right) { vector<int>tmp(right - left + 1); int i = left; int j = mid + 1; int k = 0; while(i <= mid && j <= right) { if(vt[i] <= vt[j]) {原创 2021-08-25 19:58:36 · 135 阅读 · 0 评论 -
快速排序 递归解法和非递归解法-C++实现
快速排序 递归解法和非递归解法-C++源码今天中午睡醒,发现忘记怎么写快排了,这就来实现一波。理解了三个步骤就非常简单:– 找基准位置– 根据基准位置划分子区间– 在子区间重复上面两个步骤我的这里的找基准方法是直接取了第一个数为基准位置,实际上这个方法是不可取的(这里只是为了方便理解)。因为当原始数组是严格降序或部分排序时,这种选取基准方法将会导致最差的时间复杂度O(n²)。在C++标准库里的快排算法选择的策略是,选取 第一个、最后一个、中间一个 的三个数的中间值作为基准。递归解法#i原创 2021-05-22 15:51:14 · 489 阅读 · 0 评论 -
并查集板子-带注释-c/c++
#include<iostream>using namespace std;int n = 20005;int father[20005];// 并查集初始化void init() { for (int i = 0; i < n; ++i) { father[i] = i; }}// 并查集里寻根的过程int find(int u) { return u == father[u] ? u : father[u] = find(fat原创 2021-01-15 19:56:21 · 331 阅读 · 0 评论 -
大二数据结构课程设计-从数据流获取中位数-这是四个曲折的分析历程
随时找到数据流中的中位数:有一个源源不断地吐出整数的数据流,请设计一个名叫结构,可以随时取得之前吐出所有数的中位数。从二叉树到AVL,再到跳转表,再回到AVL改写Treap,最终回到现实,写了个链式heap。原创 2021-01-13 20:12:27 · 458 阅读 · 0 评论 -
希尔排序-小白级讲解-代码+练习题
希尔排序算法描述:希尔排序是插入排序的一种改进,主要是为了解决当较小的数据大都出现在数组后面时导致的移动次数明显增多的问题,思想是使用一个不断缩小的增量gap将数组元素分组,在每个分组内部先进行插入排序,当gap减少到1时整个数组元素分在一组,最后进行一次插入排序,整个排序过程结束。算法时间复杂度:最好情况:当数据已经排好序的情况下:O(N1.3);最坏情况:O(N2);平均情况:O(NlogN)算法空间复杂度:O(1)算法稳定性:不稳定算法实现:希尔排序ShellSort的实现如下:void原创 2020-12-27 17:11:40 · 1519 阅读 · 0 评论 -
简单算术表达式二叉树的构建和求值【c/c++】
无图无注释也能懂系列。先处理乘除符号,再处理加减符号,数字只能是叶子节点。思路:用vector<Btree*>存贮每一个字符,然后遍历此数组,进行建树。当建树完成,最后vector内只剩下树的根节点。此代码只适用于数字是 个位数,如果需要处理多位数,拿去修改某些地方就可以了,主要的困难还是在于如何建树。#include<vector>#include<stdio.h>#include<stdlib.h>#include<iostream原创 2020-12-05 21:12:04 · 1289 阅读 · 1 评论 -
小白级讲解【有图】+完整源码--哈夫曼树构造和哈夫曼编码
小白级讲解【有图】。声明一个map 将单词与频度对应起来,再根据频度进行构造哈夫曼树。原创 2020-12-02 18:00:02 · 1009 阅读 · 0 评论