- 博客(36)
- 收藏
- 关注
原创 简易多线程服务器
概述用双向链表保存客户信息每有用户接入创建线程,读取该用户消息,发回给所有用户。用户退出,摘除节点,线程退出代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <time.h>#include <pthread.h>#inc
2017-10-18 16:36:18
372
原创 c++ 双向链表
dList.h#pragma once#include <iostream>#include <assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode(DataType d = 0, ListNode* next = NULL, ListNode* prev = NULL)
2017-07-20 10:27:39
332
原创 c++ 单链表
sList.h#pragma once#include <iostream>#include <assert.h>using namespace std;typedef int DataType;struct SListNode{ SListNode* _next; DataType _data; SListNode(DataType x) :_data(
2017-07-20 10:25:53
355
原创 c++ 顺序表
seqence_list.h#pragma once#include <iostream>#include <assert.h>using namespace std;typedef int DataType;class SeqList{public: SeqList() :_array((DataType*)malloc(sizeof(DataType)*4))
2017-07-20 10:22:22
349
原创 拷贝构造的优化问题
#对象在生命周期结束时系统自动调用对应的析构函数,则析构函数调用次数等于构造和拷贝构造函数调用次数之和。对象作返回值返回时调用拷贝构造函数,如果拷贝构造作返回接拷贝构造传参或接拷贝构造构造对象时,将被优化。上一句总结为:不间断的拷贝构造将被优化。完成下面的题目。Test1中调用了次AA的拷贝构造函数,次AA的赋值运算符函数的重载。 Test2中调用了次AA的拷贝构造函数,次AA的赋值运算
2017-07-15 16:55:10
410
原创 写时拷贝方案分析 copy on write
copy on write写时拷贝是浅拷贝解决浅拷贝析构冲突的一种解决方案相比较于深拷贝,写时浅拷贝占用空间少(相同内容不新开辟空间),复制效率高几种写时拷贝方案比较int _refCount (错误)class String1{public: String1(char* str) :_refCount(1) { _str = (char*)
2017-07-15 08:52:44
374
原创 class string
字符串类的增删查改class String{public: String(const char* str = ""); ~String(); String(const String& s); //const String& operator=(const String& s); const String& operator=(const String& s)
2017-07-14 15:15:05
1353
原创 C/C++动态内存管理
C/C++动态内存管理C: malloc、calloc、realloc、freeC++:new\delete、new[]\delete[]malloc/free与new/delete实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。 operate new/operate deletemalloc、calloc、realloc、free
2017-07-13 10:06:06
261
原创 class Date 日期类
# class Date日期类是一个经典面试题完成比较运算符重载完成自增、自减运算符重载(前置、后置)完成加减、加等减等 int 变量运算符重载完成日期类相减运算符重载
2017-07-09 16:20:16
1003
原创 class Complex
复数类类的四个成员函数:构造、析构、拷贝构造、赋值运算符重载等于、不等于运算符重载+、+=、-、-=、*、*=、/、/=求模打印不提供大小比较(无法区分复数相等和模相等)comple.h#ifndef __COMPLEX_H__#define __COMPLEX_H__#include <iostream>using namespace std;class Complex{pu
2017-06-25 23:05:43
1556
原创 共享内存
原理Linux不同的进程所占用的虚拟内存通过页表映射到不同物理内存,通过专门的函数可以使不同的进程访问到同一块物理内存,这样不同的进程就可以通过直接在这块物理内存中读写数据实现通信。相比于管道通信,共享内存省去了两次拷贝过程,速度更快。 管道通信: 数据从进程一所占用的内存拷贝到管道,再从管道拷贝到进程二,实现通信。函数接口#include <sys/types.h>#include <s
2017-06-21 16:07:22
184
原创 C++入门基础
命名空间iostream是 C++ 提供的用于输入输出的类和函数库,只有包含这个头文件,才能使用 cin 和 cout 等类,同时也可以使用输入输出函数。namespace1.命名空间,指标识符的可见范围。 2.using namespace std; - 将命名空间 std 的标识符扩展到全局 - 在 iostream 头文件中,并没有定义全局的标识符,如果不讲 std 内的标识符扩展到全局
2017-06-20 11:48:54
468
原创 单链表习题(进阶二)——复杂链表复制
题目复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。 解法一(暴力求解) 1. 这个复杂链表是以单链表为基础的,可以先复制一个单链表,random 指针在原链表上的位置与新链表是相对应的,建立同步投影指针 shadow,与 cur 在原链表上同步,找新链表上的
2017-06-15 11:26:21
468
原创 单链表习题(进阶一)
题目判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。 判断两个链表是否相交,若相交,求交点。(假设链表不带环) 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 求带环链表环长(无环返回 -1)思路快慢指针法,快指针一次走两步,慢指针一次走一步,如果链表带环,则从慢指针到达入口点开始,由于快慢指针都在环上移动,每次移动快指针
2017-06-12 22:54:06
452
原创 单链表习题(初级)
题目总览从尾到头打印单链表 删除一个无头单链表的非尾节点 在无头单链表的一个节点前插入一个节点 单链表实现约瑟夫环 逆置/反转单链表 单链表排序(冒泡排序&快速排序) 合并两个有序链表,合并后依然有序 查找单链表的中间节点,要求只能遍历一次链表 查找单链表的倒数第n个节点,要求只能遍历一次链表 思路及代码从尾到头打印单链表递归法,若当前节点不为空,在打印当前节点前打印上一个节点。
2017-06-10 21:53:20
970
原创 字符串全排列
问题给一个字符串,输出所有的排列方式。问题思路当只有一个字符或没有字符时,直接输出,返回1。处理两个字符的情况:交换——输出——交换——输出。 处理完后保证顺序不变。处理两个以上字符的情况:转化,第 num 个字符有 num 种情况的 num-1 个字符处理,直到到处理两个字符时。 第 i 次处理时交换第 num 与第 i (或第num-1)个字符,再递归处理 num-1 个字符。处理完
2017-06-09 19:30:21
259
原创 在旋转之后的已排序数组中查找一个数字
题目在旋转之后的已排序数组中查找一个数字思路解析在已排序数组中查找一个数字我们知道用二分查找,此题目的难点在于中间数(mid)与查找数(key)的大小关系确定后,断点位置与要查找的范围的确定。 数组A 4 5 6 7 8 9 1 2 3 数组B 8 9 1 2 3 4 5 6 7 9 1 为断点位置,当mid>key时最简单的情况当left < key 且 left < mid时,所查找数
2017-06-05 22:37:26
382
原创 通讯录小项目
题目要求可以存储1000人的信息, 个人信息包括姓名、电话、住址、年龄、性别。1、从文件读取和向文件写入信息 fopen、fclose、fscanf、fprintf 2、动态开辟空间存储联系人信息 malloc、realloc、free3、添加按地址排序 offsetof、qsort、strcmp4、转移表 函数指针数组
2017-05-25 10:06:20
357
原创 error C2084 函数“”已有主体
新手错误 我在头文件里定义了这样一个结构体struct addressBook{ struct contact contacts[MAX]; int sz;}list;然后我在实现部分定义了这样一个函数void empty_contact(struct addressBook* list)在引用的头文件中定义的变量 list 具有外部链接属性,在函数定...
2017-05-18 10:30:00
25295
原创 编译通过,无法启动程序.dll
代码编译通过,却无法启动程序,可能是因为在创建工程的时候创建错了我就犯了这样一个错误,创建工程的时候估计手抖了,创建了一个动态库,生成.dll文件,咋也跑不起来,也不显示原因。 一个新手检查不出这样的问题,而老手不会犯这样的低级错误,解决方法:重新创建一个正确的工程,原代码贴过去就好了。 差别在这里:
2017-05-18 10:18:44
8230
5
原创 数组、指针与函数指针
指针数组指针数组是一个数组,数组的每一个元素都是一个指针。数组指针数组指针,是一个指针,每个指针可以指向一个数组。而且在定义数组指针事,指针所指向的数组大小和类型已经确定。 int (*parr)[4]——该指针指向一个四个int型元素的数组 char (*pch)[5]——该指针指向一个五个char型元素的数组函数指针一个指向函数的指针,需指明所指向函数的参数类型。 void (*pfun)
2017-05-13 08:14:20
230
原创 跳台阶 与 矩形覆盖 为啥都是斐波那契数列
跳台阶与矩形覆盖是同一道题跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 矩形覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 其实我先做的是矩形覆盖,我开始的想法是求从0到n/2个横向放置两个矩形(假设起始是全竖放置)的和,是现在看来好垃圾,无需了解。方法太复杂,花
2017-05-11 23:11:05
553
原创 函数调用返回与栈帧空间开辟回收
includeint Sum(int a, int b){ int ret = a + b; return ret;}int main(){ int a = 3; int b = 5; int sum = 0; sum = Sum(a, b); return 0;}
2017-04-23 16:57:28
371
原创 一组数字中只有两个数单独出现,其他数成对出现,找出这两个数
在写过一个数字单独出现后,知道全体异或后成对出现的数字将抵消,这次将得到两个单独出现的数字的结果得到两个单独出现数字异或的结果后,把两个数字分离出来就可以了,但通过x^y得到其中一个数字需要另一个数字,无法分离,但是我们知道异或为1的位两个数该位必然不同,通过这个比特位把数字分为两组,再分别异或就可以得到这两个数了void check_num(int *arr, int sz,int *x,int
2017-04-23 14:03:53
960
原创 如何取出一个数的第一个非零比特位?
取出一个数的第一个非零比特位,最简单的想法就是通过右移与1,记录右移次数,然后将1左移回去。int first_bit(int n){ int count = 0;//计数器 while(n^1)//第一位为零 { n >>=1; count++; } rerutn (1<<count);}...
2017-04-23 13:04:01
6817
原创 行、列递增的二维数组数字查找
二维数组四分查找问题: 一个二维数组,但行递增、单列递增,编写程序,在数组中查找某个数字(key),要求时间复杂度小于O(N)。 示例数组 1 3 4 2 4 5 4 5 6分析: 对这个问题,首先想到的就是二分查找,对一位数组效率最高的查找方法,能不能用类似的方法来处理这个问题呢? 先看一下二分查找 根据mid与key的关系确定下次查找的范围或输出结束
2017-04-16 13:19:17
669
原创 其他数字都是成对出现,找出唯一单独出现的数字------强大的异或
特别要求(使用位运算),这其实是个提示找到一个不同的数字,正常思维就是拿出一个来依次比较么,找到一样的就找下一个,找不到就是你了,要求用位运算,想了半天,那把‘==’用‘!’和‘^’组合用么,相同的数字异或为0,再取反就好了么。int find_single(int arr[], int sz) //接收首元素地址和元素数量{ int i = 0; int j = 0; for
2017-04-14 11:00:46
1471
原创 给一串数字,判断是否连续
题在标题,思路在代码#includeint main(){ int arr[] = { 8 , 3, 2, 6, 4, 5, 3, 7 }; //一组任意数字 int sz = sizeof(arr) / sizeof(arr[0]); //求任意数字数量 int Min = arr[0]; //假设第一个数字为最小 int count = 0; //统计数字排列
2017-04-07 16:51:23
11073
原创 (智能)三子棋 电脑能看一步 要点小技巧才能赢
三子棋是个简单的游戏,学完数组后可以用数组和函数的知识写一个三子棋三子棋这个游戏,如果双方都会玩的话其实只会平局,比较无聊,但如何让程序会玩就有点意思了直接看代码吧头文件 game.h#ifndef __GAME_H__#define __GAME_H__#include#include#include#define ROWS 3#define COLS 3v
2017-04-05 07:55:59
3577
原创 三维(多维)数组与 指针 sizeof strlen
多维数组可以看作是一维数组的首元素地址所组成的数组的首元素地址所组成的数组~~~而且同级别的元素在连续的内存空间中存储有点晕,来看个图看个代码输出了arr[0]开头的所有元素,因为arr中存储的是arr[0],加一是arr[1],解引用是arr[1][0],其存储的是arr[1][0][0]的地址,所以会输出前六个元素多维数组在进行运算时也是相同的规则
2017-04-03 18:54:01
4219
1
原创 一维数组 与指针 sizeof strlen int char
数组名在这两种情况下表示整个数组sizeof(数组名),测出整个数组的大小&(数组名),表示整个数组的地址
2017-04-02 20:44:56
409
原创 冒泡排序函数
冒泡排序算法原理: 对sz个数进行排序,每次循环比较是将数字从第一个开始, 相邻的两个数进行比较,不符合排序规则的进行交换值,共要经过sz-1次循环比较,第i次循环比较时,有i-1个数已经排好,只需进行sz-i-1次比较就好了。#define _CRT_SECURE_NO_WARNINGS 1#include#includevoid Bubble_sort(
2017-04-02 17:00:19
856
原创 五个运动员各两个个判断,每人对一个,
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。解题方法:完全将题转换成C语言,列出所有可能,判断后输出还有参考答案改问题为输出正确判断
2017-04-02 00:02:02
558
转载 linux find用法
Linux中find常见用法示例·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数;pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: fi
2017-03-29 09:59:50
285
转载 粘滞位(粘着位)的作用
文件的粘滞位(sticky)位是作什么用的? 普通文件的sticky位会被linux内核忽略, 目录的sticky位表示这个目录里的文件只能被owner和root删除 粘着位(Sticky bit) 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,其它用户就不
2017-03-29 09:56:19
1426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人