- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 c++ 11 atomic
举个例子,int64_t类型,在32位机器上为非原子操作。更新时该类型的值时,需要进行两步操作(高32位、低32位)。如果多线程操作该类型的变量,且在操作时未加锁,可能会出现读脏数据的情况。C++11起提供了atomic,可以使用它定义一个原子类型。解决该问题的话,加锁,或者提供一种定义原子类型的方法。为什么要定义一个原子类型?
2022-12-12 21:55:30
409
原创 【c++】学习智能指针
实现时需要注意一点,shared_ptr 和weak_ptr同时实现时,这两个智能指针类都需要有一个计数器的指针,这个计数器类里面(如果智能指针指向一个对象的话)要存指向这个对象的shared_ptr 和weak_ptr 的数量,之后要依据这两个数量来确定是否释放这个计数器,应该是当shared_ptr和weak_ptr的技术都为0时才释放。所谓的智能指针本质就是一个类模板,它可以创建任意的类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放该指针所指向的空间。...
2022-08-17 21:14:08
330
原创 【数据结构】平衡二叉树AVLtree
基本概念一般来说(如图1),二叉查找树的查找操作的时间复杂度为O(log2(n))但是,如果我们每次插入数据都在二叉树的一侧(如图2),那么二叉查找树就会退化成一个链表,查找操作的时间复杂度为O(n)。如何避免这种情况?需要在每次插入后从下往上逐个调整树的结构。图示是其中一种调节方法,经过调节后,根节点的两边子树高度差不会超过1,查找效率大大提高。代码实现和普通二叉树类似的,每个树节点都包含一个数据元素,一个左子树和一个右子树,另外还需要一个记录此树高度的数据height。typedef int
2022-05-29 15:23:13
323
原创 【数据结构】队列
定义队列,简而言之:先进先出,后进后出。基本结构定义:每个Node节点都有一个数据元素,一个指向前驱的指针和一个指向后继的指针,形成一个链表。然后Queue只保存这个链表的头结点。struct Node{ T elem; struct Node * prev; struct Node * next;}#define NODESIZE sizeof(struct Node)typedef struct Queue{ struct Node * head;}Queue;要实现的操
2022-05-22 19:53:49
152
原创 【数据结构】双端队列
定义deque(double-ended queue,双端队列)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出。结构示意图首先每个节点包含一个存储的元素和一个指向下一节点的指针。整个双端队列则只包含一个头(head)节点的指针和一个尾(tail)节点的指针。头节点指向链表的第一个元素,尾节点指向最后一个元素。定义的代码struct Node{ T elem; struct Node * next;};typedef struct Deque{ struct Node
2022-05-22 10:42:47
1238
原创 【数据结构】链栈
定义链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。需要实现的操作入栈、出栈、获取栈顶、清空、获取size、是否为空实现代码定义栈先定义一个单向链表,再定义栈,栈里只存放链表的以一个节点地址,有点像单链表中的头结点的作用。struct Node{ T elem; struct Node* next;}typedef struct Stack{ struct
2022-05-21 16:34:05
600
原创 【数据结构】二叉树
二叉树,每个节点包含一个数据元素,一个左子树和一个右子树(地址)。typedef int T;struct BTNode{ T elem; struct BTNode *lchild,*rchild;};typedef struct BTNode* BTree;初始化一棵二叉树注意这里传的参数是二叉树地址的地址,是个二级指针,因为我们需要将二叉树的地址(一级指针)置为NULLvoid initBTree(BTree *ptree){ assert(ptree!=NULL);
2022-05-19 22:43:00
236
原创 c++ 类的显式转换、隐式转换、可调用对象
我构建一个Front对象,其中包含了显式转换、隐式转换、可调用对象。class Front{ public: explicit Front(string str):s(str){} //阻止隐式转换的构造函数 operator string()const { //potential change 隐式转换 return s;//返回要转换的成员 } string get()const{ //explicit change 显式转换 return s;//返回要转换的成员
2022-05-19 10:39:19
238
原创 【算法】用递归的方法求斐波那契数列2021-11-15
今天来学算法,怎么求斐波那契数列。首先认识一下斐波那契数列。假设一对小兔子需要一月长大然后获得繁殖能力,之后每月生一对小兔子,每月共有多少只兔子?抽象为数学函数:我们用代码去实现这个函数,注意这里在i>2的情况下调用了自身,然后自身还可以继续调用自身,直到计算出结果。 int Fbi(int i) { if(i<2) return i==0?0:1; else if(i>=2) return Fbi(i-1)+Fbi(i-2); }在mai
2021-11-15 19:54:30
2272
原创 【数据结构】栈(上)2021-11-14
今天有点忙,就少更点内容吧。今天学栈。栈是限定仅在表尾进行插入和删除操作的线性表。栈有入栈和出栈两种操作,遵照先入后出原则,就像弹匣中的子弹一样。单栈,有最大容量和一个栈顶,每个栈空间容纳一个元素,栈顶就是最后进入的元素,也是表尾#include <stdio.h>#define MAXSIZE 100 #define OK 1#define ERROR 0typedef int SElemType;typedef int Status;typedef struct{
2021-11-14 20:26:43
896
原创 【数据结构】静态链表/2021年11月13日
今天是努力学习数据结构的第二天。首先,静态链表不同于普通链表,它本质上是一个固定长度的数组,每个元素包含其数据(data)和游标(cur),游标(cur)指向其下一个元素(后继),并且静态链表的第一个元素用于存放待添加元素,其游标指向备用链表的下标。静态链表的最后一个元素不存放数据,其游标指向静态链表的第一个元素。实现代码:#define MAXSIZE 1000typedef int ElemType;typedef int Status;这是静态链表的基本结构每个结构包含一个data和一
2021-11-13 18:37:44
359
原创 数据结构学习【1.单链表】2021-11-12
数据结构学习【1.单链表】2021-11-12今天来学习单链表的操作吧头文件和一些自定义类型,这里都默认类型为整形#include <stdio.h>#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;链表的基本结构,每一个元素包括其数据data和后继nexttypedef struct Node{ ElemType data; struct Node *next;}Node;查询操
2021-11-12 20:19:29
354
原创 设计一个莫尔斯电码电报机
//设计一个电报机//要导入的包import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import java.applet.Applet;import java.applet.AudioClip;import java.io.File;import java.net.MalformedURLException;impo
2021-05-02 16:58:25
1068
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅