![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
嵌入式_笔记
!
展开
-
C++设计模式 - 工厂模式
工厂模式一般分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。1.简单工厂模式:举个例子:现在有宝马车和奔驰车两种车需要生产,但是只有一个工厂,且只能在同一时间生产一种车,这时就有工厂决定生产那种车了。例子虽然不是十分恰当,但是会其意即可。UML类图:代码示例:简单工厂模式#include <iostream>using namespace std;enum CarType{BENZ, BMW};class Car//车类{public: vir原创 2021-08-18 22:15:24 · 400 阅读 · 0 评论 -
C++设计模式 - 单例模式
1.单例模式的概念在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在,如何定义一个类,使得这个类最多只能创建一个对象?单例模式是一种常见的软件设计模式。它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。2.懒汉式:第一次用到类的实例的时候才回去实例化。构造函数声明为private或者protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作.原创 2021-08-17 22:49:24 · 195 阅读 · 0 评论 -
面试算法 - 二分查找
1.二分搜索 — 思路如果是有序数组,可以使用二分搜索,最坏时间复杂度为O(logn)假设在[begin,end)范围内搜索某个元素v,mid== (begin+end)/ 2 ①、如果v<m,去[begin,mid)范围内二分搜索 ②、如果v>m,去[mid+ 1,end)范围内二分搜索 ③、如果v== m ,直接返回midend指的是数组长度。2.二分搜索 — 实例3.二分搜索 — 实现#include&...原创 2022-05-26 23:14:38 · 40 阅读 · 0 评论 -
C/C++ 数据结构 队列
q.empty() 如果队列为空返回true,否则返回false。q.back() 返回队列尾元素的值,但不删除该元素。q.front() 返回队首元素的值,但不删除该元素。q.pop() 删除队列首元素但不返回其值。q.size() 返回队列中元素的个数。q.push() 在队尾压入新元素。原创 2022-09-06 00:06:41 · 40 阅读 · 0 评论 -
C/C++ 数据结构栈
s.empty();//如果栈为空则返回true, 否则返回false;定义:stack< int > s;//返回栈顶元素, 但不删除该元素。//弹出栈顶元素, 但不返回其值。//返回栈中元素的个数。原创 2022-09-05 23:26:43 · 15 阅读 · 0 评论 -
数据结构 - 二叉树(先序 中序 后序)
1.二叉树名词解释二叉树的定义:二叉树是一种每个结点至多只有两个子树(即二叉树的每个结点的度不大于2),并且二叉树的子树有左右之分,其次序不能任意颠倒。树是使用了递归定义的数据结构,树的子树还是树,其结构如下图所示:度:结点拥有的子树数目,例如上图结点A的度为3,结点E的度为0 叶子或终端结点:度为0的结点(没有子树的结点) 树的度:各个结点中度的最大值 孩子:结点的子树的根,称为根的孩子 层次:根的层次为0,根的孩子为1,以此类推 深度:树中结点的最大层次,称为树的深原创 2022-05-18 00:00:08 · 965 阅读 · 0 评论 -
数据结构 - 二叉树,二叉查找树,平衡二叉树,红黑树
一 二叉树树的概念:树是一种 非线性 的数据结构,它是由 n ( n>=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 。二叉树(binary tree)是指树中结点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 。两种特殊的二叉树:一棵深度为k,且有2^k原创 2022-05-14 17:51:22 · 335 阅读 · 0 评论 -
数据结构 - 链式队列
1.链式队列链式队列 : 用链表形式实现的队列。链表结点为队列数据存储区,链表结点包括两部分数据存储区和指针存储区。数据存储区 :存放真实有效数据的区域。指针存储区 :存放下一个链表结点的地址。2.创建链式队列为链式队列申请内存,即为队首指针和队尾指针申请内存。为链式队列头结点申请内存,头结点不存放有效数据,方便队列的操作。将队首指针和队尾指针指向头结点,即队首指针和队尾指针相等。链式队列头结点指针域为空,即为NULL;头结点数据域可不管,亦可为零,作为链式队列有效的原创 2021-12-26 23:26:43 · 2688 阅读 · 0 评论 -
数据结构 - 顺序环形队列
1.队列队列是一种特殊的线性表,线性表两端都可以进行插入删除,而队列只能在队头删除,队尾插入。插入元素称为入队,删除元素称为出队。2.队列的特点:(1)只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表 (2)进行插入操作的一端称为队尾(入队列) (3)进行删除操作的一端称为队头(出队列) (4)队列具有先进先出(FIFO)的特性3.队列的分类:顺序队列环形队列环形队列的入队4.代码实现seqqueue.h...原创 2021-12-26 23:06:49 · 781 阅读 · 0 评论 -
数据结构 - 思维构图链式栈
1.链式栈的节点2.链式栈的描述typedef int datatype;typedef struct node{ datatype data; struct node* next;}listnode,*linklist;3.创建空栈linklist linkstack_create()//创建空栈{ linklist * s; if((s = (linklist *)malloc(sizeof(linklist))) == NULL) { printf(.原创 2021-07-25 12:08:33 · 121 阅读 · 0 评论 -
数据结构 - 顺序栈
1.什么是栈栈是限制在一端进行插入操作和删除的线性表,允许进行操作的一端称之为栈顶,另一端固定为栈底,当栈中没有元素时称为空栈。栈的特点:后进先出(LIFO)。原创 2021-07-20 21:32:45 · 368 阅读 · 1 评论 -
数据结构 - 双链表的向前遍历和向后遍历,删除节点,
1.双链表的内部构造2.向前遍历双链表// 前向遍历一个双遍历,参数pTail要指向链表末尾void qianxiang_bianli(struct node *pTail){ struct node *p = pTail; while (NULL != p->pPrev) { printf("data = %d.\n", p->data); p = p->pPrev; }}3.向后遍历双链表// 后向遍历一个双链表.原创 2021-07-20 18:53:01 · 1027 阅读 · 0 评论 -
数据结构 - 双链表的头插法和后插法
1.单链表的局限性-> 单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题。使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单向链接。链表中的各个节点内存不相连,有利于利用碎片化的内存。-> 单链表各个节点之间只由一个指针单向链接,这样实现有一些局限性。局限性主要体现在单链表只能经由指针单向移动(一旦指针移动过某个节点就无法再回来,如果要再次操作这个节点除非从头指针开始再次遍历一次),因此单链表的某些操作就比较麻烦(算法比原创 2021-07-20 00:07:50 · 2959 阅读 · 0 评论 -
数据结构 - 遍历单链表,删除节点,单链表逆序
1.遍历单链表// 遍历单链表,pH为指向单链表的头指针,遍历的节点数据打印出来void bianli(struct node*pH){ //pH->data // 头节点数据,不是链表的常规数据,不要算进去了 //struct node *p = pH; // 错误,因为头指针后面是头节点 struct node *p = pH->pNext; // p直接走到第一个节点 printf("-----------开始遍历-----------\n"); while (原创 2021-07-20 00:02:04 · 1318 阅读 · 1 评论 -
数据结构 - 单链表的头插法和尾插法
1.单链表的结构:-> 链表是由节点组成的,节点中包含:有效数据和指针。-> 定义的struct node只是一个结构体,本身并没有变量生成,也不占用内存。结构体定义相当于为链表节点定义了一个模板,但是还没有一个节点,将来在实际创建链表时需要一个节点时用这个模板来复制一个即可。-> 链表的内存要求比较灵活,不能用栈,也不能用data数据段,只能用堆内存。-> 头指针并不是节点,而是一个普通指针,只占4字节。头指针的类型是struct node *类型的,所以它才能指向原创 2021-07-19 22:48:46 · 1251 阅读 · 1 评论