自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 内核链表的用法

一、内核链表的基本思想 linux内核链表是使用C语言实现的通用链表,为双向循环链表,可以方便的移植使用。它的基本思想是将数据域和指针域分开,内核链表实现的一系列增、删、改、查操作就是针对指针域的,而数据域则由内核链表的使用者根据实际需求自行完成。这样一来,内核链表便可以实现通用,而应用程序则可以不用关心链表底层操作的实现,感觉上有点类似C++继承机制。 二、内核链表源码 可从linux内核源码中提取,只需要拷贝list.h一个文件即可,网上也有不少版本,不过整体的思想是一致的。 三、部分关键源码 1、指针

2021-02-16 22:50:27 772

原创 判断链表中是否有环

一、简述   判断一个链表中是否存在环,使用快慢指针,时间复杂度O(n),空间复杂度O(1)。 二、代码实现 bool hasCycle(ListNode *head) { if(NULL == head){ return false; } ListNode *pFirst = head; ListNode *pSecond = head; while((NULL != pFirst->next)

2020-11-17 22:46:14 102

原创 单链表反转

一、简述   完成对单向链表的反转。固定维护两个指针,时间复杂度为O(n),空间复杂度为O(1)。 二、代码实现 ListNode* ReverseList(ListNode* pHead) { if((NULL == pHead) || (NULL == pHead->next)){ return pHead; } ListNode *prev = pHead; ListNode *pnext = pHead-&

2020-11-17 22:39:33 91

原创 寻找数组中的第K大元素

一、简述   使用数据结构堆,实现查找数组中的第K大元素。流程如下:数组内容堆化(因为是查找第K大,所以使用大根堆)、依次取出并删除堆的根节点、将剩余元素堆化、取到第K个即为目标元素。 二、代码实现 #include <iostream> #include <vector> using namespace std; int findKth(vector<int> a, int n, int K) { int heapSize = n;

2020-11-17 22:32:56 335

原创 Linux下时间相关接口封装

一、相关系统调用 1、time函数 函数原型:time_t time(time_t *time) 头文件:#include <time.h> 功能:获得系统当前时间 返回值(长整型):成功返回从公元1970-1-1,00:00:00到当前的秒数,失败返回-1 参数(传出参数):同返回值 2、gmtime函数 函数原型:struct tm *gmtime(const time_t *time) 头文件:#include <time.h> 功能:将从公元1970-1-1,00:00:00

2020-09-29 22:04:32 218

原创 线程池原理及C语言实现

一、简介 1、线程池的概念 线程池本质就是线程的集合。 进程在启动时便创建一定数量的线程,在没有任务时,这些线程处于空闲状态。程序在运行时可将任务通过任务队列传递给线程池,这是池中的线程便会启动一个来执行该任务,任务执行完后,启动的线程不会被销毁,而是重新返回空闲状态,等待下一个任务的执行。 2、线程池的优势 在多线程运行的程序中,如果不断地创建和销毁线程,会过度消耗系统资源,内核开销较大。并且过度切换线程会带来一定的危险,从而增加系统崩溃的可能性。 线程池会维护相对稳定的线程数,减少了频繁创建、销毁线程带

2020-09-13 17:15:13 630

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除