
数据结构
文章平均质量分 50
链表,数,图等笔记
Obrigado.
不断进步,懂得分享
展开
-
蚂蚁集团2022-09-15笔试
子串的定义:一个字符串取一段连续的区间得到的新字符串。例如"arcaea"的子串有"arc"、"ca"等,但"ara”则不是它的子串。例如,可以把’b’变成两个’a’,可以把z’变成两个’y。请你输出长度最短的合法字符串,有多解时输出任意即可。一个字符串,代表小红操作前的字符串。如果有多个合法解,输出任意一个合法字符串即可。小红定义一个字符串是好串,当且仅当只有一个字符出现的次数为奇数,其它字母均为偶数。一个不超过200000的,仅由小写字母组成的字符串。一个正整数x,代表最终的’a’的数量。原创 2022-09-15 20:53:50 · 3269 阅读 · 0 评论 -
记一个SGI空间配置器的设置OOM处理函数的用法
学习SGI中的oom_handler的设置方式。原创 2022-08-29 16:00:47 · 221 阅读 · 0 评论 -
十大排序算法:冒泡排序算法
通过不断地交换操作,将符合要求的元素不断向后移动,达到排序的效果原创 2022-07-30 17:33:48 · 306 阅读 · 0 评论 -
栈的应用:中缀,后缀,前缀表达式的相互转换,及利用后缀表达式求值
中缀,后缀,前缀原创 2022-05-12 11:02:20 · 351 阅读 · 0 评论 -
寻找二叉树指定节点的祖先节点
目前有两种方法:通过后序非递归遍历来寻找指定节点的所有祖先。代码示例如下:void getAnstor(TreeNode* rt){ if(rt == nullptr) return; stack<TreeNode*> stack_, ts; // ts为中间栈 unordered_set<TreeNode*> hash;// 标记节点是否访问过 stack_.push(rt); TreeNode原创 2022-05-10 14:35:03 · 3115 阅读 · 0 评论 -
十大排序算法:堆排序算法
sc原创 2022-04-14 21:07:09 · 225 阅读 · 0 评论 -
list::sort源码对比(侯捷老师源码剖析和c++11中当前使用的库中的实现)
首先看一下侯捷老师《STL源码剖析》中的源码// list 不能使用STL 算法 sort(),必须使用自己的 sort() member function,// 因为STL算法sort() 只接受RamdonAccessIterator.template <class T, class Alloc>void list<T, Alloc>::sort() { // 如果为空链表或只有一个元素的链表,则什么也不做 if (node->next == nod原创 2021-10-04 20:56:37 · 494 阅读 · 0 评论 -
子集生成:递归、迭代、二进制
子集生成,给定一个数组,数组中包含一些元素(简单起见,假设其中包含的是数字)生成该集合所有的子集。比如:{1, 2, 3}子集为{{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}本题比较简单,有点像01背包问题。解题思路如下:首先,将空集合放入结果集。然后遍历源集合中的每个元素,往空集合中加还是不加。话说不太明白,举个例子{a, b, c}首先结果集合中添加{}空集合然后将结果集中的元素去除,对第一个源集合中的元素,也就是a,进.原创 2021-06-27 17:30:08 · 331 阅读 · 0 评论 -
算法基础:素数环
题目描述:一个环由n个圈组成,将自然数1-n放入圈内,使得任意相邻圈的两个数之和均为素数。第一个圈的元素均为1。下图为n=6时的一个例子:程序样例输入为一个整数n68输出分别为1 4 3 2 5 61 6 5 2 3 41 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2解题思路:首先能想到的就是暴力法,全排列然后去筛选结果,但是就是存在效率低的问题。现使用深搜回溯来解决素数判断采用埃筛法具体原创 2021-06-25 17:43:30 · 1171 阅读 · 0 评论 -
散列表的拉链法解决冲突c语言实现
#define N 12//首先定义相关的结构体typedef struct HNode { int key; struct HNode *next;}Hnode;/* 创建哈希表 heahLink哈希表,里面存储的为指针变量 key关键字列表 n关键字数目*/void createHB(Hnode *heahLink[], int key[], int n) { ...原创 2019-12-24 12:54:22 · 3536 阅读 · 0 评论 -
十大排序算法:希尔排序算法
希尔排序也叫缩小增量排序,是一种插入排序。#include<bits/stdc++.h>using namespace std;void shellSort(vector<int> &src){ int size = src.size(); //本排序算法需要画图一步一步分析才能清晰地晓得其中的奥秘 for(int interval = size>>1;interval > 0;interval >>= 1){原创 2021-04-15 10:09:50 · 449 阅读 · 0 评论 -
十大排序算法:插入排序
#include<bits/stdc++.h>using namespace std;void insertSort(vector<int> &src){ if(src.size() == 1) return;//处理只有一个元素的数组 for(int i = 1;i<src.size();++i){ int temp = src[i]; int j = i -1; while(j>=0){原创 2021-04-15 09:59:44 · 122 阅读 · 0 评论 -
十大排序算法:归并排序算法
一、思路 【分治模式:重点在于合并】分解: 将n个元素分割成个n/2个元素的子序列解决: 将两个子序列递归的排序合并: 合并两个已经排好序的子序列得到结果形式代码void sort(vector<int> &A,int l,int r){ if(l < r){ int mid = (l + r)>>1; sort(A,l,mid);//对左侧排序 sort(A,mid+1,r);//对右侧排序 merge(A,l,mid,r);//合并原创 2021-04-10 22:35:32 · 230 阅读 · 0 评论 -
十大排序算法:快速排序算法
一、快速排序算法思想或步骤分解: 数组A[p…r]被划分为两个子数组A[p…q-1]和A[q+1…r],使得A[q]为大小居中的数,左侧A[p…q-1]中的每个元素都小于等于它,而右边A[q+1…r]每个元素都大于等于它。解决: 通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]进行排序。合并: 因为子数组都是在原址进行排序,所以不需要合并,原数组已经有序。通过上述描述发现:划分是问题的关键算法的就可以写出如下框架:void quickSort(A,p,r){ if(p<原创 2021-04-09 21:33:43 · 6025 阅读 · 0 评论 -
图的六个常用算法总结举例
本文章设计的知识有(每个都有理子)帮助那些像我一样刚开始接触图,对图相关的知识的实践有点难以一下手的bro们:常用的深度优先搜索DFS,广度优先搜索BFS最小生成树算法Prim,Kruskal单源最短路径Dijkstra算法全源最短路径Floyd算法分不同的部分进行一个一个说明:一,深度优先搜索DFS,广度优先搜索BFS首先我是定义了一个头文件,里面包含存储图结构信息的一些结构体,DFS函数,BFS函数,释放内存等//Graph.h#pragma once#include<st原创 2020-08-11 12:01:20 · 2118 阅读 · 0 评论 -
二叉树的相关操作一(建树,遍历(非递归),查找指定节点)c版本代码和cpp版本代码
//声明二叉树的节点数据结构typedef struct node { char data; struct node *lchild, *rchild; int flag;//只在后序非递归2中使用}BiTNode,*BiTree;int N = 0;//控制先序遍历序列的下标/* 根据先序遍历序列建树 char *str为先序序列数组*/BiTree createTree(...原创 2019-12-25 10:25:28 · 343 阅读 · 0 评论 -
Dijstra迪斯特拉算法
#define maxSize 50#define INF 999/* -n:图的顶点个数 -MGraph:图的边信息,应为MGraph[n][n],可用宏定义指示 -v0:最短路径的起始顶点 -dist:存最短路径的长度 -path:存最短路径,path[i]=j;表示i最短路径上的前一个几点下标为j*/void Dijkstra(int n, int MGraph[][max...原创 2020-04-05 23:41:33 · 513 阅读 · 0 评论