![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
数据结构
_Peko_
这个作者很懒,什么都没留下…
展开
-
【设计模式07】 桥接模式
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。实现我们有一个作为桥接实现的 DrawAPI 接口和实现了 DrawAPI 接口的实体类 RedCircle、GreenCircle。Shape 是一个抽象类,将使用 DrawAPI 的对象。BridgePatternDemo转载 2021-11-25 11:18:11 · 113 阅读 · 0 评论 -
【设计模式06】 适配器模式
适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。用电器来打个比喻:有一个电器的插头是三脚的,而现有的插座是两孔的,要使插头插上插座,我们需要一个插头转换器,这个转换器即是适配器。适配器模式涉及3个角色:源(Adaptee):需要被适配的对象或类型,相当于插头。适配器(Adapter):连接目标和源的中间对象,相当于插头转换器。目标(Target):期待得到的目标,相当于插座。适配器转载 2021-11-10 10:53:39 · 94 阅读 · 0 评论 -
【设计模式05】单例模式
单例模式定义: 只有一个实例的类,并且提供唯一一种供外界访问的方式。案例代码:public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; } public void print(){原创 2021-11-04 10:25:26 · 73 阅读 · 0 评论 -
【设计模式04】 原型模式
原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当需要创建大量重复的对象时,可以使用原型模式,避免大量的new,提高性能。实现: 实现Cloneable接口,以及重载Object的clone方法。实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSuppor转载 2021-10-26 11:53:22 · 50 阅读 · 0 评论 -
【设计模式03】 建造者模式
建造者模式定义: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。具体点说,就是考虑用相同的原料制作出不同的东西出来。案例代码:项目目录原创 2021-10-14 16:44:18 · 60 阅读 · 0 评论 -
【设计模式02】 抽象工厂模式
抽象工厂模式定义: 工厂模式,只有一种工厂,而抽象工厂模式,是在工厂模式的基础上再包装一层,制造一个工厂中心的抽象类,其子类创建多个不同的工厂。案例代码:项目目录|—abstract-factory-pattern |—pom.xml |—src |—main |—java |—org |—peko |—design原创 2021-10-12 16:28:09 · 58 阅读 · 0 评论 -
【设计模式01】 工厂模式
工厂模式定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。案例代码:项目目录|—factory-pattern |—pom.xml |—src |—main |—java |—org |—peko |—design |—AnimalFactory.jav原创 2021-10-12 16:27:54 · 55 阅读 · 0 评论 -
【哈希表——简单实现】
#include<stdio.h>#include<malloc.h>#define MAXSIZE 12 #define Status int#define TURE 1#define FALSE 0 #define NULLKEY -32768 // 哈希表 typedef struct HASHTABLE{ int* elem; int ...原创 2019-12-14 17:40:26 · 93 阅读 · 0 评论 -
【查找——折半查找——插值查找】
折半查找查找前提:序列必须是有序的。核心思想:每次都从查找范围的中间下标开始比较,如果key值偏大,因为序列式递增的,则将范围缩小至原来的右半部分,否则将范围缩小至左半部分,接着继续计算中间下标,继续比较,直至匹配关键字。时间复杂度:O(logn)#include<stdio.h>int fun(int a[],int left,int right,int ...原创 2019-12-03 17:44:58 · 419 阅读 · 0 评论 -
【图——邻接表】
typedef char VertexType;typedef int EdgeType;#define MaxVex 100typedef struct EdgeNode //边表结点{ int adjvex; //邻接点域,存储邻接顶点对应的下标 EdgeType weight; //用于存储权值,对于非网图可以不需要 struct EdgeNode *...原创 2019-12-03 17:15:26 · 166 阅读 · 0 评论 -
【栈——求解后缀表达式】
/*** 求解后缀表达式: 遍历后缀表达式中的数字和符号: 对于数字:进栈 对于符号:从栈中弹出数字作为右操作数 从栈中弹出数字作为左操作数 根据运算符进行运算 将运算结果压入栈中 遍历结束:栈中唯一数字作为计算结果***/#include<stdio.h>#include<stdlib.h...原创 2019-12-02 16:39:10 · 169 阅读 · 0 评论 -
【栈——中缀表达式转后缀表达式】
/**中缀转后缀的算法: 遍历中缀表达式中的数字和符号: 对于数字:直接输出 对于符号: ·左括号:进栈 ·运算符号:与栈顶符号进行优先比较 若栈顶符号优先级低:此符号进栈 (默认栈顶若是左括号,则左括号的优先级最低) 若栈顶符号优先级高:将栈顶符号弹出(并输出),直到栈顶的符号优先级低,然后进栈 ·右括号:将栈顶符号弹出(并输出...原创 2019-12-01 19:42:46 · 132 阅读 · 0 评论 -
【栈——括号匹配】
#include<stdio.h>#include<stdlib.h>#define MAX_SIZE 1024#define SEQSTACK_True 1#define SEQSTACK_FALSE 0/** 扫描字符串,如果碰到左括号,直接入栈; 如果碰到右括号,从栈顶弹出括号, 判断是否是左括号,如果是则匹配成功**///数组模拟栈的...原创 2019-12-01 19:42:02 · 65 阅读 · 0 评论 -
【栈——顺序栈】
#include<stdio.h>#include<stdlib.h>#define MAX_SIZE 1024#define SEQSTACK_True 1#define SEQSTACK_FALSE 0//数组模拟栈的顺序存储typedef struct SEQSTACK{ void* data[MAX_SIZE]; int size;}Se...原创 2019-12-01 19:41:28 · 86 阅读 · 0 评论 -
【栈——链栈】
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;typedef struct LINKSTACK{ LinkNode head; int size;}LinkSt...原创 2019-12-02 16:39:37 · 78 阅读 · 0 评论 -
【队列——顺序循环队列】
#include<stdio.h>#include<malloc.h>#define State int#define Ture 1#define False 1#define MAXSIZE 10 //队列容量为10,故实际能装填数组的大小为9(循环队列的满状态是指容量还剩1) typedef struct QUEUE{ int a[MAXS...原创 2019-12-01 18:24:47 · 265 阅读 · 0 评论 -
【二叉树——拷贝与释放】
#include<stdio.h>#include<stdlib.h>#include<string.h>//二叉树结点typedef struct BINARYNODE{ char ch; struct BINARYNODE* lchild; struct BINARYNODE* rchild;}BinaryNode;//遍历二叉...原创 2019-12-01 17:30:49 · 143 阅读 · 0 评论 -
【二叉树——计算高度】
#include<stdio.h>#include<stdlib.h>#include<string.h>#include"tree.h" //二叉树结点typedef struct BINARYNODE{char ch;struct BINARYNODE* lchild;struct BINARYNODE* rchild;}Bina...原创 2019-12-01 17:29:36 · 103 阅读 · 0 评论 -
【二叉树——计算叶子数量】
#include<stdio.h>#include<stdlib.h>#include<string.h>//二叉树结点typedef struct BINARYNODE{ char ch; struct BINARYNODE* lchild; struct BINARYNODE* rchild;}BinaryNode;// 计算叶...原创 2019-12-01 17:28:48 · 3750 阅读 · 0 评论 -
【二叉树——遍历】
#include<stdio.h>#include<stdlib.h>#include<string.h>//二叉树结点typedef struct BINARYNODE{ char ch; struct BINARYNODE* lchild; struct BINARYNODE* rchild;}BinaryNode;void ...原创 2019-12-01 17:28:03 · 58 阅读 · 0 评论 -
【线性表——企业链表】
企业链表企业链表与普通的链表的区别是,后者的结点包含数据域和指针域,而前者只有指针域。因为指针的灵活性,只要将指针强转为任意一种数据结构的指针,便能拥有想要的数据元素。例如:以下是两种不同的数据结构typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;typedef struct PERSON{ char*...原创 2019-12-01 17:27:00 · 158 阅读 · 0 评论 -
【线性表——循环链表】
#include<stdio.h>#include<stdlib.h> #include<string.h>#define CIRCLELINKLIST_TRUE 1#define CIRCLELINKLIST_FALSE 0//链表的小结点typedef struct CIRCLELINKNODE{ struct CIRCLELINK...原创 2019-12-01 17:26:24 · 80 阅读 · 0 评论 -
【归并排序——MergeSort】 稳定排序
归并排序的核心思想:即从最小单位的元素开始两两归并(2路归并)将要排序的数组中分成 n/2 个单个元素序列(n为数组的大小,单个元素的序列自然是有序的) 接着通过两两比较,将每两个有序的序列组成一个新的有序序列(两个元素的)(如果数组大小的奇数的话,那么会剩下一个1个大小的序列) 然后又将新的有序序列继续进行排序组成新的有序序列(四个元素、或三个元素).....直至组成完整的有序序列。...原创 2019-11-22 19:08:17 · 386 阅读 · 0 评论 -
【堆排序——HeapSort】 不稳定排序
堆排序:就是对数据堆进行操作,堆就是类似于正三角的数据结构,但数据结构里没有堆这个结构,但有类似的:完全二叉树。所以堆排序就是对完全二叉树的数据结构进行操作。堆排序相当于选择排序的改进版(选择排序类)堆排序的时间复杂度:O(nlogn)数组构造完全二叉树:用数组构造完全二叉树是极简单的,只要知道在完全二叉树中,非叶子结点 i 的左孩子是 2i ,右孩子是2i +...原创 2019-11-21 15:43:36 · 322 阅读 · 0 评论 -
【快速排序——QuickSort】 不稳定排序
参考视频:(看完这个简短视频就对快排有个清晰的认识了:)https://www.bilibili.com/video/av39093184?from=search&seid=18039325521312650109快速排序相当于冒泡排序的改进版(交换排序类)时间复杂度:O(nlogn)#include<iostream>using names...原创 2019-03-12 21:51:08 · 211 阅读 · 0 评论 -
【希尔排序——ShellSort】 不稳定排序
希尔排序是插入排序的改进版本(插入排序类)核心思想:原本插入排序是对一整个数组的数据进行逐个比较的,而希尔排序是将整个数组划分为若干部分,然后分别进行插入排序,形成基本有序的序列(小的基本在前面,大的基本在后面),最后对整个数组再用一次插入排序。希尔排序的时间复杂度:O(n)例如:以下是对数组进行间隔增量increment为2的分组,然后分别进行插入排序,最后再进行一次插入排序...原创 2019-11-20 21:21:34 · 383 阅读 · 1 评论 -
【插入排序——InsertSort】 稳定排序
假如一个数组只有1个元素,那么这个数组就已经是有序的了;假如这个数组有2个元素,那么就把a[1]当做是比较数temp,比较a[0],如果a[1]<a[0],那么就将a[0]右移一位(从小到大排序),接着在位置0插入temp;假如这个数组有3个元素,那么就把a[2]当做是比较数,比较a[0],a[1],如果a[2]<a[1],那么就将a[1]右移一位(从小到大排序),如果a[0]...原创 2019-11-20 18:11:48 · 249 阅读 · 0 评论 -
【简单选择排序——SelectSort】 不稳定排序
核心思想:从首位设为比较数开始,逐个对后面的数据进行比较,选择出最值,并记录其下标,一轮过后交换比较数和最值时间复杂度 O(n²)#include"stdio.h"void swap1(int a[],int i,int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp;}void swap2(int* a,int* b){ in...原创 2019-11-20 16:24:43 · 159 阅读 · 0 评论 -
【冒泡排序——BubbleSort】 稳定排序
核心思想:相邻的数据两两比较,如果反序则交换时间复杂度 O(n²)例如以下程序:根据排序数组的大小来决定冒泡的次数:轮数(大小为10,则需要冒泡10次) 每一轮从最右边开始往左两两比较,如果下标大的数小于下标小的数则交换到左边,那么到达最左端时,会出现一个最小值(即每一轮都会确定下一个数)#include"stdio.h"void swap1(int a[],int i...原创 2019-11-20 16:00:12 · 159 阅读 · 0 评论 -
【二叉排序树】 查找与插入
#include<stdio.h>#include<stdlib.h>#include<string.h>#define Status int //二叉树结点typedef struct BINARYNODE{ int data; struct BINARYNODE* lchild; struct BINARYNODE* rchild;}B...原创 2019-11-16 20:55:49 · 143 阅读 · 0 评论 -
【线性表——链表】
一、写链表,主要需要两个结构体: 一个是表头LinkList(只要知道了表头的地址,就能往下找到每一个结点;表头还记录结点长度) 一个是结点LinkNode(包括数据域和指针域,每个结点都是通过指针域串联起来)//表头typedef struct LINKLIST{ LinkNode* head; int size;}LinkList;...原创 2019-12-01 16:33:37 · 251 阅读 · 0 评论