- 博客(98)
- 资源 (2)
- 收藏
- 关注
原创 (C++实现)输入两个链表,找出它们的第一个公共结点
方法一:先数出两条链表的长度,得到长度差d,先将长链表从头结点往后走d步,之后第二个链表从头开始,两个链表一起一步一步走,直到两个链表的节点第一次相等为止,此时指针位置即为所求。 ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode *p1=pHead1; L...
2018-06-22 21:08:42
1732
1
原创 C++实现动态规划解决在数组中找出指定和的数字
题目:给定一些数,要求找出相加等于100的所有数。有唯一解。例:输入:1,4,57,63,32输出:1,4,63,32思路:从前往后遍历,每个数字有两种对待方法——要或者不要。所以用到递归。先要,之后进行后续递归。如果没有得到结果,就不要这个数字,继续递归。都不行的话就是没有解。代码:#include<iostream>#include<vector>using nam...
2018-06-22 15:28:19
1867
原创 检测“双重叠“字符串C++实现
用双指针进行遍历,当两个字符一样的时候再用循环判断是否是双重叠。#include <iostream>using namespace std;int main(){while(1){ string a; cin>>a; if(a.size()<1) continue; if(a=="q") return 0; int max=0,star=0...
2018-06-01 22:02:50
1088
原创 判断单链表中是否有环/两列表是否相交系列问题及C++实现
题目:1.给一个单链表,判断其中是否有环的存在;2.如果存在环,求出环上节点的个数;3.如果存在环,找出环的入口点;4.如果存在环,求出链表的长度;5.如果存在环,求出环上距离任意一个节点最远的点(对面节点);6.(扩展)如何判断两个无环链表是否相交;7.(扩展)如果相交,求出第一个相交的节点;解答:1.给一个单链表,判断其中是否有环的存在;运用快慢指针来确定:每次快指针走两步,慢指针走一步。如果...
2018-05-30 17:06:44
701
转载 C++中时间与字符串之间的相互转换
1、常用的时间存储方式 1)time_t类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。 2)tm结构,这本质上是一个结构体,里面包含了各时间字段 struct tm { int tm_sec; /* seconds after the m...
2018-03-23 22:17:39
4099
原创 最大子序列和问题O(N)
问题描述:给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大。解决思想:要想让时间复杂度为O(N),就只能用一个for(或while等的)循环。即遍历一遍数组。1.我们可以从头遍历,把每一个元素相加,每加一次就与最大和进行比较,留下最大的;2. 小于0的元素不可能成为最大子序列的第一或最后一个值(把它去掉的子
2017-11-30 10:58:05
644
原创 C++中的cin函数和异常的来源(failbit)与处理(clear)
cin小知识点可以将hex,oct,dec控制符与cin一起使用,来指定输入解释为16,8,10进制格式。例如:下列语句可以将12或0x12解释为16进制的12或10进制的18,将ff(FF)解释为10进制的255.cin>>hex;cin>>机制:跳过空白(空格,换行符,制表符),直接在输入流中抽取非空白字符。cin的成员函数cin.get()与cin.getline
2017-11-06 22:57:10
2948
原创 C++中cout格式化输出的相关函数与控制符
cout<<<<为插入运算符,重载后可识别C++中的所有基本类型(unsigned signed char short int long float double以及组合)ostream& operator<<(type);通过看上面的函数原型。由于返回输出运算符引用,即cout。可实现拼接(一行中多次输出)char name[10] = "hello";char* p = name;
2017-11-06 00:22:52
1232
原创 C++类型转换运算符
dynamic_cast用于(指向派生类对象的)基类指针转换成派生类指针。 如果转换失败,则返回0,即空指针。(通过判断转换是否成功,来决定是否用派生类里的函数(基类中可能没有那个函数))class A {};class B : public A {};class C : public B {};A* a = new A;A* b = new B;A* c = new C;//指向B(
2017-10-27 23:11:54
314
转载 欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-10-27 22:19:27
178
原创 C++中cin和cout中不会被注意的细节(字符串的处理)
cout.put(ch);与cout cincin使用空白(空格,制表符和换行符)来确定字符串的结束位置。例子:#include using namespace std;int main(){ char ch[20]; cin >> ch; cout << "ch = " << ch << endl;}可以看出
2017-09-10 23:27:20
1402
原创 C++基础——类与对象(下)
赋值运算符重载函数类名& operater=(const 类名& 形参){// 赋值操作return *this;}调用时机:赋值代码Bill Bill::operator=(const Bill& b){ price = b.price; count = b.count; discount = b.discount; if(N
2017-07-20 17:53:52
459
原创 C++基础——类与对象(上)
面向对象四大特征:特征 说明 类比抽象 抽出具体事物的普遍性的本质 分门别类:鸟类、哺乳类、鱼类封装 把数据与处理(函数)包在一起 通信录(增加、删除)继承 数据与处理(函数)的传承
2017-07-20 16:42:21
292
原创 从C到C++过渡知识
输出Hello World案例:创建文件:vim HelloWorld。cpp源代码:#include using namespace std;int main(){ cout<<"Hello world"<<endl; }编译:g++ HelloWorld.cpp -o HelloWorld执行:./HelloWorld结果:Hello world本文件中C和C++
2017-07-13 22:16:23
450
原创 线程池编程
概念:为什么————频繁创建和销毁线程浪费CPU资源。是什么————一堆线程放在一个池子里统一管理。流程:1.初始化线程池、任务队列和工作线程。2.向任务队列中添加任务。3.将等候在条件变量(任务队列上的任务)上的一个线程唤醒并从该任务队列中取出第一个任务给该线程执行。4.等待任务队列中所有任务执行完毕。5.关闭线程池。工作原理:1.首先,建立一个用来存放需
2017-06-30 10:29:22
350
原创 socket 中 TCP 和 UDP 编码流程
TCP socket:Server:listenfd = socket()struct sockaddr_in //内部数据必须是网络序sin_familysin_addrsin_portbind(listenfd)listen(listenfd,backlog)connfd = accept(listenfd,...) // 阻塞read(conn
2017-06-28 23:17:10
1473
原创 IO复用
概念:多路网络连接复用一个IO线程。如果用监控来自10根不同地方的水管(I/O端口)是否有水流到达(即是否可读),那么需要10个人(即10个线程或10处代码)来做这件事。如果利用某种技术(比如摄像头)把这10根水管的状态情况统一传达到某一点,那么就只需要1个人在那个点进行监控就行了。由于I/O多路复用是在单一进程的上下文中的,因此每个逻辑流程都能访问该进程的全部地址空间,所以开销比多进程低得多;缺...
2017-06-28 12:56:34
583
原创 socket编程——TCP
函数流程框图:创建:int socket(int domain,int type,int protocol);domain——>协议域:AF_INET————IPV4。AF_INET6————IPV6。AF_LOCAL————Unix域。type——>类型:SOCK_STREAM——流式套接字,TCP协议支持该套接字(提供面向连接,可靠的数据传输服务
2017-06-15 15:00:14
578
原创 socket接口转换操作(网络序与主机序)
字节序转换操作:头文件:网络序转主机序:unit 16_t ntohs(unit16_t net_short);network to host short。把unsigned short类型从网络序转换到主机序。unit 32_t ntohs(unit32_t net_long);network to host long。把unsign
2017-06-14 23:01:16
1735
原创 线程间的读写锁
共享独占:读取锁——共享写入锁——独占即:读锁可以加多个;有写锁时,读写锁都加不上;有读锁时,可以加读锁而不能加写锁。静态分配读写锁:pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;动态分配读写锁:pthread_rwlock_init(&rwlock,NULL);pthread_rwlock_destro
2017-06-08 11:46:40
412
原创 线程间的互斥量和条件变量
互斥锁:PS:互斥锁的生存周期必须大于用到互斥锁的线程的生存周期!静态分配互斥量:pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;动态分配互斥量:pthread_mutex_init(&mutex,NULL);pthread_mutex_destroy(&mutex);mutex————互斥锁。加锁:int pt
2017-06-08 11:18:32
327
原创 线程的信号量
创建:int sem_init(sem_t* sem,int pshared,unsigned int value);sem————信号量对象。pshared——信号量类型:0为线程共享;value———初始值。返回值———0成功,-1失败。销毁:int sem_destroy(sem_t* sem);返回值————0成功,-1失败。阻塞等待:int
2017-06-08 10:45:58
448
原创 多线程编程
概念:进程内的一个执行单元,执行的一段程序片段。共享全局变量。(和主函数同时执行的子函数就是一个线程)(hello world程序,可以说是一个进程,也可以说是一个线程)。参考手册:man 7 threads查看线程:命令:ps -T -p ————查看该pid的线程top -H -p ————开启线程查看htop——设置:F2(开启“树状视图”查看
2017-06-01 17:18:07
287
原创 读写锁
作用:(实现文件的读写同步)当一个进程正在读或修改文件的某个部分时,阻止其他进程修改同一文件区。访问操作:写入锁——又叫排它锁读取锁——又叫共享锁多进程访问(同一个进程访问只会覆盖已有的锁)已存在锁 读取锁 写入锁无 OK OK读取锁 OK NG写入锁 NG NG同一个进程访问只会覆盖已有的锁在访问之前尝试加锁可以知道文件是否正在被读写。加锁区域:文件锁—
2017-06-01 14:35:05
515
原创 systemV信号量
头文件:sys/sem.h查看:ipcs信号量获取:int semget(key,nsems,semflg);key:命名信号量。IPC_PRIVATE 和 ftok()两种方式。nsems:信号量数目。非0——新建的信号量的数量。0———获取信号量(打开时填0)semflg:IPC_CREAT————————创建信号量,已存在时不出错(创
2017-05-24 17:12:56
420
原创 posix信号量
头文件:semaphore.h库:-pthread查看:ls /dev/shm/(所有名字前面都自动加上了sem.)man sem_overview命名信号量(基于文件):创建:sem_t* sem_open(const char* name,int oflag,mode_t mode,unsigned int value);name:信号量IPC名字。
2017-05-24 13:23:14
338
原创 信号量
分类:二值信号量——0和1计数信号量——0和n作用:控制多进程共享资源的访问P操作:0——挂起进程>0——减一V操作:0——恢复进程>0——加一本质:任意时刻只能有一个进程访问临界区(代码)
2017-05-24 13:21:35
230
原创 system V 共享内存
头文件:sys/shm.h查看:ipcs共享内存获取:int shmget(key_t key,size_t size,int shmflg);key:IPC_PRIVATE——亲缘间ftok———————非亲缘间size:内存容量:非0——新建的共享内存大小0———获取共享内存shmflg:IPC_CREATIPC_CREAT|IPC_
2017-05-24 11:22:28
910
原创 POSIX共享内存(内存映射)
本质:两个进程访问同一个逻辑内存;直接访问内存,不用read()/write(),非常方便。匿名映射文件:设备 作用 举例/dev/zero 永远输出0的设备文件 dd if=/dev/zero of=磁盘分区 count=1024 bs=1024/dev/null 丢弃一切写入其中数据 cat test > /d
2017-05-24 10:18:31
627
原创 system V 消息队列(msg)
头文件:sys/msg.h查看:ipcs命令结构体:自定义消息缓冲区结构msgbuf:mtype:消息类型(必须是long型;必须是结构体第一个变量)。mtext:消息数据(可以随意定义)。例子:struct msgbuf{ long mtype;/* must > 0 */ char mtext;/* dat
2017-05-18 10:11:02
1846
原创 POSIX消息队列(mq_)
头文件:mqueue.h库:rt--------librt.so编译的时候加-lrt查看POSIX消息队列所有函数:man mq_overview结构体:struct mq_attr{mq_flags;——标志:————在mq_open时被初始化;————在mq_setattr中设置;————其值为0(阻塞)或者O_NONBLOCK(非阻塞)。
2017-05-17 17:29:48
7951
原创 用管道或套接字实现客户端服务器模型
图示模型: 主要步骤:1.客户端获取文件路径,发送到服务器。2.服务器接收到文件路径,并且读取到文件内容,在发送回客户端。3.客户端接收文件内容,并显示到控制台。代码:使用两个FIFO实现客户服务器模型:client:#include #include #include #include #include #in
2017-05-17 15:05:55
532
转载 进程间通信时读写阻塞的条件
匿名管道(pipe,dup,popen)和套接字(socketpair)中的读写操作:只能亲缘间实现通信命名管道(fifo)中的读写操作:建立管道文件,通过管道文件进行通信。可实现非亲缘间的通信。
2017-05-16 19:22:21
1013
原创 套接字(全双工)实现进程间通信
特点:sv【0】和sv【1】可读可写。每个进程固定用一个接口。写数据时:通道不满不阻塞;读数据时:通道里没数据时阻塞。可用fcntl设置为非阻塞。创建:int socketpair(int domain, int type, int protocol, int sv【2】);参数:domain:套接口的域:AF_LOCAL--------现在用法AF_UNI
2017-05-16 19:09:42
1420
原创 Linux中在终端捕获程序的返回值(return 0和exit(0))
在程序运行结束后,在终端(shell界面)上输入命令:echo $?显示的即为上一个程序结束时的返回值(return 1,exit(2),_exit(12)都可以,abort退出时,返回值为随机数)。功能:可以判断上一个程序时在什么情况下结束的:正常情况下,返回值为0即为正常退出;为1或-1为错误终止退出。也可以自己设置值。代码:#include int main
2017-05-12 23:04:38
10844
转载 Linux中字符串转整形数字的函数
Linux内核中提供的一些字符串转换函数:lib/vsprintf.c 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_strtoul(const char *cp, char **endp, un
2017-05-12 15:59:50
3947
原创 getopt()函数(分析命令行参数)
头文件:#include 函数形式:int getopt(int argc, char* argv【】, const char* optstring);功能:getopt直接分析命令行参数,找到选项和选项参数以及操作数的准确位置。参数:optstring:optstring里存放需要识别的选项字符(如果该选项有参数,则后面加冒号)。argc:命令行字符串个数
2017-05-12 14:43:36
792
转载 Linux中常用操作命令
Linux简介及Ubuntu安装Linux,免费开源,多用户多任务系统。基于Linux有多个版本的衍生。RedHat、Ubuntu、Debianaa安装VMware或VirtualBox虚拟机。具体安装步骤,找百度。再安装Ubuntu。具体安装步骤,找百度。安装完后,可以看到Linux系统的目录结构,见链接http://www.weixuehao.com/archives/492
2017-05-12 14:15:54
252
原创 FIFO管道/命名管道(半双工)
特点:可以是非亲缘进程之间;读写必须同时进行,否则阻塞。创建命名管道:int mkfifo(pathname,mode);参数:pathname:文件路径(文件必须不存在)。mode:模式。返回值:0成功非0失败创建FIFO管道代码:#include #include #include #include int main()
2017-05-12 11:41:14
1547
原创 匿名管道 与 命名管道/FIFO管道 的特点
匿名管道:必须是亲缘进程之间。写不会阻塞;读会阻塞。命名管道:可以是非亲缘进程之间。读写必须同时执行,否则阻塞。
2017-05-12 11:39:36
812
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人