数据结构
文章平均质量分 57
BeyondESH
个人博客:blog.beyondesh.top
展开
-
C++并发编程实战—单例模式与线程池实现
定义:线程池是一种设计模式,它预先创建并维护一定数量的线程,这些线程可以重复执行多个任务。当有任务需要执行时,线程池会选择一个可用的线程来执行任务,任务执行完毕后,线程会返回线程池,等待下一个任务的到来。功能降低线程创建和销毁的开销:线程的创建和销毁是比较耗费资源的操作,使用线程池可以避免频繁地创建和销毁线程,从而提高程序的性能。提高系统的响应速度:线程池中的线程可以立即执行任务,而不需要等待线程的创建和启动时间。原创 2024-10-04 16:37:21 · 1780 阅读 · 0 评论 -
C++11新特性总汇
C++11新特性总汇原创 2024-09-29 14:11:05 · 565 阅读 · 0 评论 -
C++11新特性—emplace_back成员函数
是 C++ 标准库中,特别是容器提供的一个非常有用的成员函数。它的主要用途是在向vector的末尾添加元素时,直接在容器的内存位置构造该元素,而不是先构造一个元素,然后复制或移动到vector中。这样做可以显著提高性能,特别是当元素是大型对象或需要复杂初始化时。原创 2024-09-27 08:01:54 · 542 阅读 · 0 评论 -
C++11新特性—std:function模板类
是 C++ 标准库中的一个头文件,它提供了对函数对象(也称为仿函数或函子)和可调用实体的支持。这些功能主要用于泛型编程中,特别是在与算法(如中定义的那些)和标准容器(如等)的交互中。头文件定义了几个模板类和函数,这些模板类和函数可以帮助你创建和使用可调用实体。原创 2024-09-26 23:03:56 · 743 阅读 · 0 评论 -
C++动态规划问题—状态转移方程
状态转移方程是动态规划(Dynamic Programming, DP)中的一个核心概念,它描述了从一个状态转移到另一个状态时的变化规则。在解决优化问题时,特别是当问题可以分解为重叠的子问题时,动态规划通过存储子问题的解来避免重复计算,从而提高效率。状态转移方程就是用来描述这种“状态”如何根据“决策”转移到下一个“状态”的数学表达式。 在经典的爬楼梯问题中,状态转移方程是。原创 2024-09-26 17:57:11 · 475 阅读 · 0 评论 -
C++动态规划问题—使用最小花费爬楼梯
给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。原创 2024-09-26 17:56:41 · 157 阅读 · 0 评论 -
C++动态规划问题—爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?原创 2024-09-26 17:56:09 · 341 阅读 · 0 评论 -
C++动态规划问题—斐波拉契数
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。给定n,请计算F(n)。原创 2024-09-26 16:43:48 · 414 阅读 · 0 评论 -
C++动态规划问题—第 N 个泰波那契数
泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数n,请返回第 n 个泰波那契数 Tn 的值。原创 2024-09-26 16:42:56 · 409 阅读 · 0 评论 -
C++动态规划问题—不同路径
一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?2 * 109。原创 2024-09-26 16:42:20 · 311 阅读 · 0 评论 -
C++动态规划问题—打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。原创 2024-09-26 16:41:17 · 373 阅读 · 0 评论 -
Linux线程同步—竞态条件与互斥锁、读写锁(C语言)
当多个线程并发访问和修改同一个共享资源(如全局变量)时,如果没有适当的同步 措施,就会遇到线程同步问题。这种情况下,程序最终的结果依赖于线程执行的具体时序, 导致了竞态条件。竞态条件(race condition)是一种特定的线程同步问题,指的是两个或者以上进 程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。它会导致程 序的行为和输出超出预期,因为共享资源的最终状态取决于线程执行的顺序和时机。为了 确保程序执行结果的正确性和预期一致,需要通过适当的线程同步机制来避免竞态条件。原创 2024-09-20 23:51:41 · 1770 阅读 · 0 评论 -
Linux线程同步—竞态条件和互斥锁(C语言)
当多个线程并发访问和修改同一个共享资源(如全局变量)时,如果没有适当的同步 措施,就会遇到线程同步问题。这种情况下,程序最终的结果依赖于线程执行的具体时序, 导致了竞态条件。竞态条件(race condition)是一种特定的线程同步问题,指的是两个或者以上进 程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。它会导致程 序的行为和输出超出预期,因为共享资源的最终状态取决于线程执行的顺序和时机。为了 确保程序执行结果的正确性和预期一致,需要通过适当的线程同步机制来避免竞态条件。原创 2024-09-19 23:41:34 · 1108 阅读 · 0 评论 -
Linux线程处理—线程终止
1当某个线程调用 pthread_exit 方法后,该线程会被关闭(相当于 return)。线程 可以通过 retval 向其它线程传递信息,retval 指向的区域不可以放在线程函数的栈内。其他线程(例如主线程)如果需要获得这个返回值,需要调用 pthread_join 方法。需要注意的是,pthread_detach 不会等待子线程结束,如果在后者执行完毕之前主 线程退出,则整个进程退出,子线程被强制终止。原创 2024-09-18 21:19:33 · 798 阅读 · 0 评论 -
Linux线程处理—线程终止
当某个线程调用 pthread_exit 方法后,该线程会被关闭(相当于 return)。线程 可以通过 retval 向其它线程传递信息,retval 指向的区域不可以放在线程函数的栈内。其他线程(例如主线程)如果需要获得这个返回值,需要调用 pthread_join 方法。原创 2024-09-18 10:59:06 · 356 阅读 · 0 评论 -
Linux线程处理—线程终止
当某个线程调用 pthread_exit 方法后,该线程会被关闭(相当于 return)。线程 可以通过 retval 向其它线程传递信息,retval 指向的区域不可以放在线程函数的栈内。其他线程(例如主线程)如果需要获得这个返回值,需要调用 pthread_join 方法。原创 2024-09-17 22:49:47 · 439 阅读 · 0 评论 -
Linux线程处理—线程创建
每个线程都有一个唯一的标识符(即线程 ID),这个标识符是通过 pthread_t 类型 的变量来表示的,当 pthread_create 成功创建一个线程时,它会将新线程的标识符存储 在 thread 参数指向的位置。是 POSIX 线程(也称为 pthreads)库中一个重要的函数,它用于等待一个线程的终止。当一个线程被创建后,它可能会并行地执行自己的任务,而主线程(或其他线程)可能需要等待这个线程完成其任务后才能继续执行。函数就提供了这样的同步机制。原创 2024-09-16 23:34:43 · 809 阅读 · 0 评论 -
Linux进程通讯—信号处理
signal系统调用是 UNIX 和类 UNIX 系统(如 Linux)中用于处理信号的一个基础机制。信号是软件中断,它们可以被系统或者进程发送给另一个进程或线程,以通知它们发生了某个事件。这些事件可以是硬件中断(如外部设备请求服务)、软件异常(如除零错误)、用户请求(如用户请求停止进程)等。原创 2024-09-16 03:52:29 · 207 阅读 · 0 评论 -
Linux进程通讯—消息队列
消息队列生产者是指产生消息并将消息发布到消息队列或主题中的应用程序。它负责构建或生成消息,这些消息可以是简单的文本、复杂的结构化数据或二进制数据,具体内容、格式和结构取决于应用程序的需求和消息中间件的设计。消息队列消费者(Message Consumer)是消息队列系统或消息中间件中的另一个关键角色,它负责从消息队列中取出(或订阅并接收)消息,并对这些消息进行进一步的处理。原创 2024-09-16 01:44:41 · 1880 阅读 · 0 评论 -
进程通讯—共享内存对象
共享内存是指允许多个不相关的进程访问同一个逻辑内存区域。这种内存区域在物理上通常是同一段内存,但在虚拟地址空间中,不同进程通过各自的页表将其映射到这一共同的物理内存区域。原创 2024-09-15 13:17:14 · 728 阅读 · 0 评论 -
Linux进程通讯——共享内存对象
进程通讯—共享内存,可以开启一块内存共享对象,我们可以像使用一般文件描述符一般使用这块内存对象。truncate 和 ftruncate 都可以将文件缩放到指定大小,二者的行为类似:如果文件 被缩小,截断部分的数据丢失,如果文件空间被放大,扩展的部分均为\0 字符。缩放前后 文件的偏移量不会更改。缩放成功返回 0,失败返回-1。 不同的是,前者需要指定路径,而后者需要提供文件描述符;ftruncate 缩放的文件 描述符可以是通过 shm_open()开启的内存对象,而 truncate 缩放的文件原创 2024-09-12 01:20:22 · 680 阅读 · 0 评论 -
Linux进程通讯—有名管道FIFO
FIFO 和 Pipe 一样,提供了双向进程间通信渠道。但要注意的是,无论是有名管道还 是匿名管道,,否则可能出现通信混乱(进程读到自己发的 数据)采用库函数创建。原创 2024-09-11 21:31:39 · 541 阅读 · 0 评论 -
C++实现转置矩阵
给你一个二维整数数组matrix, 返回matrix的。矩阵的是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。原创 2024-09-10 23:15:28 · 431 阅读 · 0 评论 -
蓝桥杯——幸运数(C语言)
小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。例如 2314 是一个幸运数字,因为它有 4个数位,并且2+3-1+4。现在请你帮他计算从1至100000000 之间共有多少个不同的幸运数字。原创 2024-09-04 09:39:02 · 263 阅读 · 0 评论 -
力扣题——罗马数字转整数(C++)
罗马数字包含以下七种字符:IVXLCD和M。例如, 罗马数字2写做II,即为两个并列的 1。12写做XII,即为XII。27写做XXVII, 即为XXVII。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为IX。IVXXLCCDM给定一个罗马数字,将其转换成整数。s[1, 3999]原创 2024-09-04 09:37:59 · 423 阅读 · 0 评论 -
力扣题——删除有序数组中的重复项(C++)
给你一个的数组nums,请你**** 删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk如果所有断言都通过,那么您的题解将被。原创 2024-09-04 09:36:48 · 956 阅读 · 0 评论 -
C++数据结构实现转置矩阵
给你一个二维整数数组matrix, 返回matrix的。矩阵的是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。原创 2024-09-04 09:34:14 · 276 阅读 · 0 评论 -
C语言实现顺序字符串的基本操作
【代码】C语言实现顺序字符串的基本操作。原创 2024-09-03 22:38:14 · 144 阅读 · 0 评论 -
C语言实现顺序栈
【代码】C语言实现顺序栈。原创 2024-09-03 22:36:51 · 141 阅读 · 0 评论 -
C语言实现顺序队列
【代码】C语言实现顺序队列。原创 2024-09-04 02:45:00 · 141 阅读 · 0 评论 -
C语言实现顺序表的增删改查
【代码】C语言实现顺序表的增删改查。原创 2024-09-03 22:35:42 · 116 阅读 · 0 评论 -
C语言实现链式队列
【代码】C语言实现链式队列。原创 2024-09-03 22:34:57 · 153 阅读 · 0 评论 -
C语言实现单链表的增删改查
【代码】C语言实现单链表的增删改查。原创 2024-09-03 22:34:30 · 150 阅读 · 0 评论 -
JAVA模拟双色球
【代码】JAVA模拟双色球。原创 2024-09-03 22:32:11 · 133 阅读 · 0 评论 -
JAVA网络编程-入门教程
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程在网络通信协议下,不同计算机上运行的程序,可以进行数据传输。原创 2024-09-03 22:30:59 · 1024 阅读 · 0 评论 -
串的模式匹配算法
KMP算法它是有Knuth、Morris和Pratt三个人同时发现的,所以我们称之为KMP算法。它是一个很优秀的算法,通过对模式串的一个预处理,将我们的时间复杂度减少到了一个线性的水平。KMP算法精髓:利用已经匹配过的模式串的信息,求出next数组→利用next数组进行匹配(主串指针不回溯)原创 2024-09-03 22:25:46 · 1056 阅读 · 0 评论 -
二叉树存储实现
指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树就称为线索二叉树(Threaded Binary Tree)。线索二叉树也分为前序线索二叉树、中序线索二叉树以及后序线索二叉树,即它们都是对二叉树中的所有结点的空指针进行某种遍历方式加线索,指向结点前驱和后继的指针称为线索。原创 2024-09-03 22:24:29 · 1005 阅读 · 0 评论 -
C++基本语法——零基础新手入门教程
在我们正式开始学习C++之前,需要对计算机的一些理论的基础有一定的认知。而进制就是这样的基础,因此我们需要先学习进制。我们知道在计算机的世界中,只有0和1两个数字,那么其他的数据该如何去表示呢?进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。原创 2024-09-03 22:12:40 · 3087 阅读 · 0 评论