算法与数据结构C++
风筝_
这个作者很懒,什么都没留下…
展开
-
7-1图论基础/7-2图的表示
7-1图论基础图由节点和边组成。图的分类: 有向图:边有方向 无向图:边没有方向 有权图:边有一个数值和其对应 无权图: 和上面相反 连通图:节点之间是否连通 简单图:是否存在自环边(自己到自己)或者平行边(两个节点之间有多条边)7-2图的表示邻接矩阵:邻接表:邻接表适合表示稀疏图(边比较少,图中边的个数远远少于当图是完全图时的个数)邻接矩...原创 2021-05-26 11:25:46 · 335 阅读 · 0 评论 -
6/1-6/6并查集实现
用来解决连接问题版本1:查找O(1),union O(N) (只有一层)#include <iostream>#include <bits/stdc++.h>using namespace std;class unionfind{ int* id; //表示数据的组 int cnt;public: unionfind(int n) { id=new int[n]; for(int i=0...原创 2021-03-25 17:05:43 · 88 阅读 · 0 评论 -
5/9---5/11二分搜索树的局限性及相关问题
1.二分搜索树可能退化为链表改进:平衡二叉树平衡二叉树的一种实现:红黑树平衡二叉树的其他实现:2-3树、AVL树、Splay 树2.其他相关结构平衡二叉树和堆的结合:TreapTrie3.各种各样的树...原创 2021-07-25 16:50:43 · 121 阅读 · 0 评论 -
5/2 二分搜索树
#include <iostream>#include <queue>#include <cassert>using namespace std;template <typename Key,typename Value>class BST{private: struct Node{ //定义节点 Key key; Value value; Node* left; ...原创 2021-07-25 16:11:44 · 134 阅读 · 0 评论 -
5-1 二分查找法
目录LeetCode704 easyLeetCode35 easyLeetCode34 中等LeetCode153 中等LeetCode33 中等LeetCode704 easy方法一:迭代class Solution{public: int search(vector<int>& nums, int target) { ////在nums[l...r]之间查找target int l=0;原创 2021-05-03 18:27:46 · 254 阅读 · 0 评论 -
4-13排序算法总结
原创 2021-07-25 11:27:41 · 115 阅读 · 0 评论 -
4/1--4/7最大堆 C++实现
#include <iostream>#include <bits/stdc++.h>using namespace std;template<typename T>class maxHeap{private: T* data; //保存元素的数组指针 int sz; //最大堆里的元素个数 int cap; //容量 void shiftup(int k); //将第k个元素向上调整 void shif.原创 2021-03-25 15:53:25 · 105 阅读 · 0 评论 -
3-5---3-9快速排序相关
目录1.快速排序1.1 版本1:1.2 版本2:1.3 版本3:1.4 版本4:1.5 版本5:2 归并排序和快速排序的衍生问题2.1逆序对问题2.2 取数组中第n大的元素1.快速排序1.1 版本1:中间过程:最终:此时,只需将l和j位置的元素交换://对arr[left...right}部分进行partition操作//返回p,使得arr[left...p-1]<arr[p],arr[p+1...r]>arr[..原创 2021-07-24 18:09:51 · 253 阅读 · 0 评论 -
3-1/3-4归并排序相关
1递归(自顶向下)1.1版本1:void __merge(int arr[],int left,int mid,int right){ int helper[right-left+1]; for(int i=left;i<=right;i++) { helper[i-left]=arr[i]; } int i=left; int j=mid+1; int k; for(k=left;k<=right;..原创 2021-07-24 15:52:59 · 123 阅读 · 0 评论 -
补充:冒泡排序、希尔排序
冒泡排序版本1:void bubbleSort(int arr[],int n){ bool swapped; //标记每次是否有进行交换,如果没有进行交换,说明已经有序了 do{ swapped=false; for(int i=0;i<n-1;i++) { if(arr[i]>arr[i+1]) { swap(arr[i],arr[i..原创 2021-07-24 14:10:52 · 180 阅读 · 0 评论 -
2-5/2-6 插入排序法及改进
原理:将元素逐个插入到前面已经排好序的子数组中插入排序的一个重要性质是一旦找到了合适的位置,就可以提前终止内层循环,所以,对于近乎有序的数组,排序速度非常快版本1:#include <iostream>using namespace std;void insertionSort(int arr[],int n){ for(int i=1;i<n;i++) //为arr[i]找合适的位置 { for(int j=i;j>0;j-原创 2021-07-24 10:52:12 · 101 阅读 · 0 评论 -
2-4测试算法的性能
#include <iostream>#include "testhelper.h"using namespace std;//参数为数组和数组中元素的个数template<class T>void selectionSort(T a[],int n){ int i=0; int minIndex=0; for(i=0;i<n;i++) { //寻找[i,n)区间里的最小值 minIndex=i; //minI.原创 2021-02-07 21:27:10 · 107 阅读 · 0 评论 -
2-3随机生成算法测试用例
前面两节的测试用例是手工输入的,下面用随机函数生成测试用例:#include <iostream>#include "testhelper.h"using namespace std;//参数为数组和数组中元素的个数template<class T>void selectionSort(T a[],int n){ int i=0; int minIndex=0; for(i=0;i<n;i++) { //寻找[i,n)区间原创 2021-02-07 20:45:42 · 530 阅读 · 0 评论 -
2-2使用模板编写算法
上一节中的排序算法只能对整型数组进行排序下面用函数模板进行改进:#include <iostream>#include "student.h"using namespace std;//参数为数组和数组中元素的个数template<class T>void selectionSort(T a[],int n){ int i=0; int minIndex=0; for(i=0;i<n;i++) { //寻找[i,n)区原创 2021-02-07 19:47:07 · 81 阅读 · 0 评论 -
2-1选择排序法
#include <iostream>using namespace std;//参数为数组和数组中元素的个数void selectionSort(int a[],int n){ int i=0; int minIndex=0; for(i=0;i<n;i++) { //寻找[i,n)区间里的最小值 minIndex=i; //minIndex表示当前最小值所在的位置 for(int j=i+1;j<n;.原创 2021-02-07 16:38:37 · 116 阅读 · 0 评论 -
字符串函数实现
1.strlen函数int mystrlen1(char *str) //递归{ if(*str=='\0') return 0; return 1+mystrlen1(str+1);}int mystrlen2(char *str) //迭代{ int cnt=0; while(*str) { ++cnt; ++str; } return cnt;}2.strcmp函数原创 2021-03-25 10:56:31 · 344 阅读 · 0 评论 -
腾讯面试题 用拉链法实现hash,接口:插入、查找,删除
参考LRU算法原创 2021-03-24 15:55:44 · 256 阅读 · 0 评论 -
腾讯面试题 C++ 双向链表 模板类实现
c++中的双向链表写法,主要实现(增删查改,链表逆置,构造函数,运算符重载,等)c++实现双向链表,类模板双向链表原创 2021-03-24 10:35:51 · 355 阅读 · 0 评论