自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offor面试题15:链表中倒数第k个结点

typedef struct Node{ int value; Node* next;}node;void recKList(Node* Head,int num){ Node* p = Head;//快指针,先走num步 Node* q = Head;//慢指针,等p先走了num步,再开始走 int n = num; if (Head == NULL) { return; } for (int i = 0; i < n-1; i++) { p = p->

2020-08-17 15:20:26 112

原创 剑指offor面试题14:调整数组顺序使奇数位于偶数前面

#include<iostream>#include<stdio.h>#include<math.h>#include<vector>using namespace std;bool isEven(int n){ return (n & 1) == 0;}void Reorder(int* pData, unsigned int length,bool(*func)(int)){ if (pData == NULL || le

2020-08-15 22:06:23 110

原创 剑指offor面试题13:删除链表结点

void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted){ if (!pListHead || !pToBeDeleted) { return; } //删除的不是头结点,也不是尾结点 if (pToBeDeleted->n_pnext != NULL) { ListNode* pNext = pToBeDeleted->n_pnext; pToBeDeleted->m_nvalue = pNext-

2020-08-14 15:56:49 158

原创 剑指offor面试题12:打印1到最大的n位数

#include<iostream>#include<stdio.h>using namespace std;/*这个函数的逻辑是,外面的循环每循环一次,number+1nTakeOver表示的是进位nsum表示当前i位的数据当nsum=9的时候,nsum++,nsum会等于10,然后进位的nTakeOver=1;进位会在下一次循环中进位*/bool Increment(char* number){ int nlength = strlen(numbe

2020-08-13 15:30:52 109

原创 剑指offor面试题11:数值的整数次方

#include<iostream>#include<stdio.h>using namespace std;double fun(int n, int m){ if (m == 0) return 1; if (m == 1) return n; double result = fun(n, m >> 1); result *= result; if (m & 1 == 1) { result *= n; } return

2020-08-13 11:41:38 128

原创 剑指offor面试题10:二进制中1的个数

#include<iostream>#include<stdio.h>using namespace std;int fun(int n){ int count = 0; while (n){ n = (n - 1)&n;//让自己与自己减一进行与运算 count++; } return count;}int main(){ int n; cin >> n; cout << fun(n) << end

2020-08-12 18:27:51 138

原创 剑指offor面试题9:斐波那契数列

#include<iostream>#include<stdio.h>using namespace std;long long Fbc(int n){ int result[2] = { 0, 1 }; if (n < 2) { return result[n]; } long long fibNMinusOne = 0; long long fibNMinusTwo = 1; long long fibN = 0; for (int i

2020-08-11 17:58:42 145

原创 剑指offor面试题8:旋转数组的最小数字

#include<iostream>#include<stdio.h>using namespace std;int MinInorder(int* numbers, int index1, int index2){ int min = numbers[index1]; int t; for (int i = index1; i < index2 + 1; i++) { if (min>numbers[i]) { t = min;

2020-08-11 16:05:10 129

原创 快速排序

#include<iostream>#include<vector>#include<string.h>#include<list>using namespace std;void quickSort(int* a, int left, int right){ if (left >= right) { return; } int bn = a[left]; int i = left + 1; int j = right

2020-08-09 16:03:16 95

原创 easy_x是实现钟表

#include <graphics.h> // 引用图形库头文件#include <conio.h>#include<math.h>//画面尺寸#define High 480#define Width 640#define PI 3.14159int main(){ initgraph(Width, High);//初始化画布 int center_x, center_y;//中心坐标,秒针的起始坐标 center_x = Widt

2020-08-08 15:41:10 252

原创 剑指offor面试题7:用两个栈实现队列

#include<iostream>#include<vector>#include<string.h>#include<list>using namespace std;template<typename T>class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deletHead();priva

2020-08-08 14:23:53 111

原创 剑指offor面试题6:重建二叉树

#include<iostream>#include<vector>#include<string.h>using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};BinaryTreeNode* ConstructCore(int* startPreorder, int* endPreorde

2020-08-08 11:37:48 210

原创 剑指offor面试题5:从尾到头打印链表

#include<stdio.h>typedef struct node{ int data; node* next;}node;node* CreateList(){ node* head = NULL, *pnew = NULL, *ptail = NULL; pnew = (node*)malloc(sizeof(node)); pnew->next = NULL; while (1 == scanf("%d", &pnew->data))

2020-08-07 16:39:15 142

原创 剑指offor面试题4:替换空格

#include<iostream>#include<vector>#include<string.h>using namespace std;void ReplaceBlack(char str[], int lengh){ if (str == NULL || lengh < 0) { return; } int i = 0; int k = 0; while (str[i] != '\0') { if (str[i] ==

2020-08-07 15:06:30 157

原创 堆排序

#include<iostream>using namespace std;void CreateHeap(int *a, int root, int n)//第一个参数表示数组a,第二个表示当前树的根结点,第三个表示当前数组的长度{ int t = a[root]; int i = 2 * root; while (i <= n) { if (i < n) { if (a[i] < a[i + 1]) { i++; }

2020-08-06 16:28:24 87

原创 剑指offor,面试题3数组中的查找

#include<iostream> #include<string.h>#include<string>#include<vector>using namespace std;bool Find(int* matrix, int rows, int columns, int number){ bool found = false; if (matrix != NULL&&rows > 0 && col

2020-08-06 14:59:13 125

原创 C实现贪吃蛇

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<Windows.h>#define Width 25#define High 15int moveDirection;//1 2 3 4是小蛇的移动方向,分别表示上下左右int canvas[High][Width] = { 0 };//二维数组存储游戏画布中对应的元素//0为空格,-1为边框,1为蛇头,大于1为蛇身,-2

2020-08-05 18:01:08 170

原创 String类的C++实现

#include<iostream> #include<string.h>#include<string>using namespace std;class STR{public: STR(char* s_=" ")//构造函数 { int len = strlen(s_) + 1; s = new char[len]; strcpy(s, s_); } STR(STR&s_)//拷贝构造函数 { int len = str

2020-08-04 16:21:55 127

原创 递归例题

n阶汉诺塔#include<iostream>#include<stdio.h>#include<string.h>using namespace std;void Hanio(int n,char src,char mid,char dest){ if (n == 1) { cout << src << "->" << dest<<endl; return; } Hanio(n - 1

2020-07-27 21:59:16 136

原创 随便玩玩

#include<stdio.h>#include<stdlib.h>#include<Windows.h>int main(){ int i, j; int x = 1, y = 20; int velocity_x=1, velocity_y=1; int left = 0, right = 20, top = 0,bottom=10; while (1) { if (x ==top || x == bottom) { veloc

2020-07-04 00:02:52 190

原创 LInux开发需要掌握的技能

**Linux后台开发应该具备技能一、linux和os:1、命令:netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验ipcs提供进程间通信方式的信息,包括共享内存,信号量,消息队列。-a 输出所有-m 共享内存-q 消息队列-s 信号ipcrm移除一个消息对象、或者共享内存、或者信号量ipcrm用法 (小写是id标识)ipcrm -M shmkey 移除用shmkey创建的共享内存段ipcrm -m shmid 移除用s

2020-06-26 16:57:01 794

原创 编程之法 面试和算法心得

1.字符串反转实现字符串反转函数。例如,“July"反转后变成"yluJ”。#include<stdio.h>#include<string.h>#include<vector>#include<iostream>using namespace std;int main(){ vector<char>a; char c; while (1) { cin >> c; if (c == '&')

2020-06-20 23:22:32 339

原创 判断单链表是否为回文,快慢指针和栈

判断单链表是否为回文,快慢指正加栈的方式解决首先输入这个链表的长度,然后用尾插的方式,初始化链表。接下来用快慢指针。快指针每次走两步,慢指针每次走一步,当快指针的next为NULL时(也就是快指针走到了最后一个),那么慢指针刚好就在中间,因为链表没有环,所以将链表的情况分为奇数和偶数两种情况。当长度为奇数时,快指针第一步就走两步,慢指针第一步就走一步,当长度为偶数时,快指针第一步走一步,慢指针第一步不动。两种情况也就第一步不同,其余步数都相同。直到快指针走到末尾为止。#include<stdio

2020-06-18 23:39:14 269

原创 Linux—IO函数的例子(send/recv)

send()函数用于收发数据,原型如下:#include<sys/types.h>#include<sys/socket.h>ssize_t send(int s,const void* buf,size_t len,int flag);将缓冲区buf中大小为len的数据,通过套接字文件描述符按照flag指定的方式发送出去。返回值为成功发送的字节数。recv()函数用于接收数据,原型如下:#include<sys/types.h>#include&lt

2020-06-16 20:22:58 807

原创 Linux-多线程TCP简单聊天室

服务器端:启动服务器后,等待客户端的连接。连接一个客户端,启动一个线程。客户端的动态,发送的消息,都会传给服务器。客户端:登录输入姓名,然后连接服务器,进入聊天室。用户可以发送自己的消息和接收从服务器传递过来的别人发送的消息,当输入bye的时候,会退出聊天室。server.c 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<unistd.h&gt

2020-06-11 21:28:52 700

原创 Linux消息队列

键值构建ftok()函数ftok()函数将路径名和项目的表示符转变为一个系统V的IPC键值,其原型如下:#include<sys/types.h>#include<sys/ipc.h>key_t ftok(const char* pathname , int proj_id);其中pathname必须是一件存在的目录,而proj_id则是一个8位的值,通常用a,...

2020-02-20 21:56:43 463

原创 消息队列介绍

消息队列消息队列是内核地址空间中的内部链表,通过Linux内核在各个进程之间传递内容。消息顺序地发送到消息队列中,并以几种不同的方式从队列中获取,每个消息队列可以用IPC标识符唯一的进程标识。内核中的消息队列是通过IPC的标识符来区别的,不同的消息队列之间是相互独立的。每个消息队列中的消息,又构成一个独立的链表。消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构,并且...

2020-02-20 21:46:28 649

原创 僵尸进程和孤儿进程

僵尸进程一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait()或waitpid()获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。什么是僵尸进程首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID号,进程的终止状态,以及该进程...

2020-02-13 16:11:05 210

原创 进程复制fork

进程复制fork()产生进程的方式比较多,fork()是其中的一种方式。fork()函数以父进程为蓝本复制一个进程,其ID号和父进程ID号不同。在Linux环境下,fork()是以写复制实现的,只有内存等与父进程不同,其他与父进程共享,只有在父进程或者子进程进行修改后,才重新生成一份。1.fork函数介绍原型如下,当成功后,返回值是进程的ID,失败返回-1#include<sys/t...

2020-02-13 13:20:36 273

原创 不用算术运算符实现两个数的的加法

不用算术运算符实现两个数的的加法(1)先不考虑进位,按位计算各位累加,也就是异或操作,得到值a(2)然后计算进位,并将进位的值左移,得值b,若b为0,则a就是加法的结果。 1 #include<stdio.h> 2 int add_no_arithm(int a,int b) 3 { 4 if(b == 0) 5 { 6 re...

2020-02-12 23:04:17 368

原创 Linux笔记之动态库

动态库动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合。动态链接库的名称有别名,真名和链接名。别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成。真名是动态链接库的真实名称,一般总是在别名的基础上加上一个小版本号。除此之外,还有一个链接名,即程序链接时使用的库的名字。1.生成动态链接库操作和上面的静态库...

2019-11-23 10:42:15 223

原创 Linux笔记之静态库

静态库静态库是obj文件的一个集合,是一种函数库,通常以“.a”为后缀。静态库由程序ar生成。静态库的优点是可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间。静态库的另一个优点是开发者可以提供库文件给使用人员,不用开放源代码。理论上,静态库的执行速度比共享库和动态库要快(1%~5%)1.生成静态链接库生成静态库,或者将一个obj文件加到已经存在的静...

2019-11-23 10:38:11 181

原创 同步

1、同步,就是我调用一个功能,该功能没有结束前,我死等结果。2、异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)3、阻塞,就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。4、 非阻塞,就是调用我(函数),我(函数)立即返回,通过select通知调用者同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞阻塞IO和非阻塞IO...

2019-07-23 17:01:10 159

原创 Linux线程

线程线程:也称轻量级进程,是程序执行流的最小单元。而多线程就是指,在一个进程中有多个执行流,在同时执行。进程是承担调度的基本单位,一个进程可拥有多个线程,它的执行力度比进程更加细致,线程资源共享。注意:在Linux中并不存在真正的线程,Linux测线程是使用进程模拟的。我们在Linux系统中,线程的创建实在内核外进行的,有POSIX提供的线程库实现。因此链接这些线程函数库时要使用编译器命令的“...

2019-05-25 15:46:31 539

原创 Linux进程守护

守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过 守护进程实现的。常见的守护进程包括系统日志进程sysslogd,web服务器httpd,邮件服务器sendmail和数据库服务器mys...

2019-05-11 19:11:24 5509

原创 Linux第十次课

1、什么是信号?信号signal机制是UNIX系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。是进程间通信唯一的异步通信方式。进程可以屏蔽掉大多数的信号,除了SIGSTOP和SIGKILLSIGSTOP:使正在运行的进程暂停SIGKILL:使正在运行的进程退出QT中应用signal和slot2、信号的作用?进程之间的通信通知进程发生了异步事件3、什么...

2019-04-27 14:33:59 170

原创 Lseek函数

lseek函数lseek对文件描述符fd指定文件的读写指针进行设置,也就是说,它可以设置文件的下一个读写位置头文件:#include <unistd.h>#include <sys/types.h>函数原型:off_t lseek(int fd, off_t offset, int whence);参数说明:fd :表示要操作的文件描述符off_set:...

2019-04-27 14:32:55 625

原创 Linux中的open,close,write ,read函数

open函数open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄。int fd = open(参数1,参数2,参数3);int fd = open(const char *pathname,int flags,mode_t mode);1.句柄(file descriptor 简称fd)首先每个文件都属于自己的句柄,例如标准输入是0,标准...

2019-04-20 18:58:34 2500 1

原创 Linux第九次课

信号的概念signal信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式。QT:信号和槽signal和slot查看系统中的信号kill -llinux中有64-2=62个信号信号的值定义在signal.h中,在Linux中没有16和32这两个信号。其中编号34以上的是实时信号,34以下的信号是普通信号。而这些信号各自在什么条件下产生...

2019-04-20 11:08:58 118

原创 Linux第八次课

1、通过文件描述符相关的文件的状态信息fstatstat:取得文件状态表头文件#include<sys/stat.h>#include<unistd.h>定义函数int stat(const char * file_name,struct stat *buf);lstatstat和lstat返回的是通过文件名查到的状态信息。它们的结果基本一致,但当文件是一...

2019-04-20 11:07:50 237

空空如也

空空如也

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

TA关注的人

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