查找算法小记
顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。
基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。
复杂度分析: 查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;当查找不成功时,需要n次比较,时间复杂度为O(n);所以,顺序查找的时间复杂度为O(n)。
C++实现源码:
123456789//顺序查找int SequenceSearch(int a[], int value, int n){ int i; for(i=0; i<n; i++) if(a[i] == value) return i; return -1;}
二分查找说明:元素必须是有序的,如果是无序的则要先进行排序操作。
基本思想:也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关 ...
红黑树🌲
R-B Tree🌲
R-B Tree,全称Red-Black Tree,又称为”红黑树”,一种特殊的二叉树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(black)
转载声明:https://www.cnblogs.com/skywang12345/p/3245399.html
红黑树的优势红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。所以红黑树的插入效率更高!!!
红黑树这种数据结构应用十分广泛,在多种编程语言中被用作符号表的实现,如:
Java中的java.util.TreeMap,java.util.TreeSet;
C++ STL中的:map,multimap,multiset;
.NET中的:SortedDictionary,SortedSet 等。
红黑树的特性(1) 每个节点或者是黑色,或者是红色
(2) 根节点是黑色
(3) 每个叶子节点(nil)是黑色
(4) 如果一个节点是红色的,则它的子节点必须 ...
链表
链表学习记录,若有不足请指出来
1 结点结构123456// Definition for singly-linked list.struct SinglyListNode { int val; SinglyListNode *next; SinglyListNode(int x) : val(x), next(NULL) {}};
2 操作与数组不同,我们无法在常量时间内访问单链表中的随机元素。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费O(N)时间,其中 N 是链表的长度。
添加操作-单链表
令插入结点的next为其插入位置下结点
原位置下一节点为要插入的结点即可
与数组不同,我们不需要将所有元素移动到插入元素之后。因此,您可以在 O(1) 时间复杂度中将新结点插入到链表中,这非常高效。
删除操作-单链表12//删除prev的下一结点prev->next == prev->next ->next;
删除第一个结点12SinglyListNode * ...
BFS和DFS算法(基础)
深度优先搜索算法和广度优先搜索算法
数据结构——栈和队列
栈栈的定义与运算
栈是只允许在线性表的一段进行插入和删除的线性表。表中值允许插入和删除的一段称为栈顶命令一段称为栈底。
由于只能在栈顶进行插入和删除操作,使得后进栈的元素先出栈,先进栈的元素后出栈,所以栈是一种后进先出(Last In First Out,简称LIFO)的数据结构。有关栈的应用都是基于这一特性。
栈的操作通常称为入栈或进栈,其删除操作称为出栈或退栈。当栈中五元素是,称为空栈。
有关栈的基本操作主要有以下几种:
1. 栈的初始化操作,即建立一个空栈S
2. 判空栈操作,弱S为空栈,返回一个真值
3. 进栈操作,在S栈顶插入一个元素X
4. 出栈操作,若栈S不空,则取栈顶元素(栈顶元素不删除)。
栈的顺序存储结构(又称为顺序栈)类似于线性表的顺序存储结构。
队列双队列实现栈的操作:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546class MyStack { queue<int> queue1; qu ...
设计模式之行为型模式
行为型模式
学习笔记之C++设计模式——创建型模式
📑 设计模式之结构型模式
📑 设计模式之创建型模式
总的来说,行为型模式就是用来对类或对象怎样交互和怎样分配职责进行描述。
模板方法模式
AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
ConcreteClass(具体子类):它是抽象类的子类,用于是现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中的已经实现的具体基本操作。
模板方法案例
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505 ...
设计模式之结构型模式
.dimitt:hover:after{
}
结构型模式
学习笔记之C++设计模式——创建型模式
📑 设计模式之结构型模式
📑 设计模式之行为型模式
Proxy模式又叫做代理模式,是构造型的设计模式之一, 它可以为其他对象提供-种代理( Proxy )以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一-般在交互的过程中 (交互前后) , 进行某些特别的处理。
代理模式
通俗理解就和海外代购类似,由一个海外代购专门负责所有需要从其他国家购买的这个行为。
以下为代理模式案例及其代码:
点击查看123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102// 代 ...
设计模式之创建型模式
设计模式
学习笔记之C++设计模式——创建型模式
📑 设计模式之结构型模式
📑 设计模式之行为型模式
一、工厂模式简单工厂模式代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include <iostream>#include "main.h"using namespace std;/* 定义一个水果抽象类。供具体水果实现,和工厂使用*/class Fruit {public: virtual void getName() = 0;};class Apple : public Fruit{public: virtual void getName() { cout << "我是苹果" << endl; }};class Banana : pub ...