自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 2017校招笔试题

题目:输入一个字符串从左到右遍历,如果遇到三个连续相同的子串就将这个子串删除,并将原串剩下的部分拼接到一起,重复上述过程,直到字符串中没有可以删除的子串。 eg: 输入:AAABCCDDDCB AABBBABBBA 输出:BB A重要:从一个字符串中删除一个子串,必须将原字符串的内容strcpy到开辟的数字中(new char[SIZE]),才

2016-09-09 21:55:50 1272 3

原创 WebBench-1.5源码剖析

Web网站压力测试工具Webbench: Webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力. 它是由Lionbridge公司开发。 Webbech 能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。 webBech的标准测试可以向我们展示服务器的两项内容:每分钟相应请求次

2016-09-04 20:18:58 1778

原创 二叉树相关题

题目:在二叉树中找到一个节点中序遍历的下一个节点1、有父指针。分两种情况Node* FindNextNode(Node* node) { if (_root == NULL || node == NULL) return NULL; Node* next = NULL; //1、右不为空,找到右子树的最左节点即为下一个节

2016-07-24 21:03:14 435

原创 将搜索二叉树转换成有序的双向链表

根据搜索二叉树的性质:中序遍历是有序的,因此中序遍历搜索二叉树,将left相当于prev指向前一个小的数,right相当于next指向后一个较大的数。递归实现Node* TurnToList_R() //搜索树转换为有序的双向链表 { cout << "递归" << endl; Node *Head = NULL; //头指针 Node *Ta

2016-07-21 19:24:04 745

原创 求两个节点的最近公共祖先节点

分三种情况 1、搜索二叉树,根据搜索二叉树的性质,左子树的所有节点比根节点小,右子树的所有节点比跟节点大。 如果两个节点都比根节点小,则递归左子树 如果两个节点都比跟节点大,则递归右子树 否则,两个节点一个在左子树,一个在右子树,则当前节点就是最近公共祖先节点。 2、二叉树有指向父节点的指针。问题转换成判断两个链表是否相交。 先分别求出从两个节点到根节点的路径长度,让路径长的节点先走多出

2016-07-21 19:17:39 4680

原创 并查集(求朋友圈的个数)

有如下题目: 已知有n个人和m对好友关系(存于数组r)。如果两个人是直接或间接的好友(好友的好友的好友…),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。 假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5

2016-07-09 21:17:10 5568

原创 二叉搜索树及判断一棵树是否平衡

二叉搜索树的特点: 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。 4. 左右子树都是二叉搜索树。 一棵二叉搜索树如下图: 平衡二叉树的特点: 左右子树的高度差<=1 无法

2016-07-08 20:34:42 1556

原创 二叉树的子树

题目:有两个二叉树,判断第二个树是不是第一个树的子树,即第二个树是不是第一个树的一部分。如图所示:红色标记中的部分就是第二棵树。 #include<iostream>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNo

2016-06-02 21:54:08 357

原创 I/O多路复用之select/poll/epoll

1、基本概念  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。   (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

2016-05-27 19:14:26 589

原创 调整数组的顺序

数组奇数在偶数前面,使用函数指针#include<iostream>using namespace std;bool IsOdd(int n) //判断是否为奇数{ return (n & 1) == 1;}void ReOrder1(int *arr, int len, bool (*fun)(int)){ int begin = 0; int end = len

2016-05-15 20:05:03 1208

原创 输出1到最大的n位数

#include<iostream>#include<string.h>using namespace std;bool add(char *num){ if (num == NULL) return false; bool OverFlow = false; int nTakeOver = 0;//表示进位 int len = strlen(n

2016-05-15 19:24:12 506

原创 求一个数的x次方

思路:分几种情况 1、不合法的输入,基数等于0并且指数小于0。 2、任何一个数的0次方都等于1。 3、指数是负数,可以先对指数求绝对值,然后计算出次方的结果之后再取倒数。 4、递归求次方效率更高,时间复杂度为O(lgn)。 根据公式: #include<iostream>using namespace std;//判断浮点数是否等于0bool equal(double d1, dou

2016-05-14 18:39:08 1790

原创 查找旋转数组的最小值

题目:输入一个递增排序的数组的一个旋转,输出旋转数组的最小值。例如:数组{4,5,6,1,2,3}为数组{1,2,3,4,5,6}的一个 旋转数组,该数组的最小值为1。 思路:时间复杂度为O(n)的解法很简单。更高效的一种解法是利用二分查找实现O(lgn)的查找。两个标志begin和end,分别指向数组的第一个和最后一个元素。min指向数组中间项。如果arr[min]大于arr[begin],最小

2016-05-11 20:07:56 379

原创 合并两个有序数组

题目:有两个排序的数组arr1和arr2,内存在arr1的末尾有足够的空余空间容纳arr2,实现一个函数,把arr2中的所有数字插入到arr1中,并且所有的数字是排序的 思路:从后向前合并#include<iostream>using namespace std;int* MergeTwoArr(int *arr1, int *arr2, int len1, int len2){ if

2016-05-11 16:15:09 457

原创 用两个栈实现一个队列

题目:用两个栈实现一个队列,实现头删和尾插的功能。 思路:栈是先进后出,队列是先进先出。用两个栈InsertStack和TmpStack。如果要插入数据就只往InsertStack中插。删除数据时,如果TmpStack为空,则将InsertStack中的数据逐个拿出来,插入到TmpStack中,这样先入InsertStack栈的元素,就被翻转到TmpStack的栈顶,就可以在TmpStack中直接

2016-05-08 21:20:02 370

原创 重建二叉树

题目:输入某二叉树的前序中序的遍历结果,重建出该二叉树。假设输入的前序和中序遍历中没有重复的数字。例如输入的前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6}。 根据前序和中序遍历,构建出二叉树如下图: 后序遍历为:{7,4,2,5,8,6,3,1}。 思路:在二叉树的前序遍历中第一个数就是根节点。在中序遍历中根节点在中间,左子树的节点位于根节点的左边,

2016-05-07 22:50:11 1219

原创 单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器

2016-05-07 17:28:29 657

原创 替换空格

题目:实现一个函数将字符串中每个空格替换成“*♥*”。例如:输入“Hello kkw accompany you long”,输出:“Hello*♥*kkw*♥*accompany*♥*you*♥*long”。 思路:先遍历一次字符串,统计出字符串的原始长度和空格个数,并由此可以计算出替换之后字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的字符串长度加上2*空格数目。

2016-05-06 21:19:52 265

原创 在二维数组中查找一个数

题目:在一个二维数组中,每一行都按照从左到右递增的顺序,每一列都按照从上到下递增的顺序排序,编写一个函数,输入这样的一个二维数组和一个整数。判断该整数是否在二位数组中。 思路

2016-05-06 17:03:57 2046

原创 选择排序

#include<iostream>using namespace std;void SelectSort(int *arr, int size){ int begin = 0, end = size - 1; while (begin < end) { int min = begin; int max = end; for

2016-01-12 17:12:30 292

原创 快排

#include<iostream>#include<assert.h>using namespace std;#include"InsertSort.h"void QuickSort(int* arr, int size){ void _QuickSort(int* arr, int left, int right); _QuickSort(arr, 0, size -

2016-01-12 17:11:09 286

原创 希尔排序(ShellSort)

时间复杂度O(n^1.25)~O(1.6n^1.25) 空间复杂度:O(1)#include<iostream>using namespace std;void ShellSort(int *arr, int size){ int gap = size; //两个数之间的距离 while (gap > 1) { gap = gap / 3 + 1;

2015-12-12 16:19:21 336

原创 简单的进度条

#include<stdio.h>#include<string.h>#include <windows.h>#define N 101void proc(){ int count = 0; char arr[N]; memset(arr, '\0', sizeof(arr)); char* lable = "|/-\\"; // '\'为转义字符若要输出‘\

2015-12-08 21:58:48 260

原创 插入排序

#include<iostream>using namespace std;void InsertSort(int* arr, int size){ for (int i = 1; i < size; i++) { int end = i - 1; while (arr[end] > arr[end + 1] && end >= 0)

2015-12-06 20:17:04 293

原创 单链表(c语言版)

SList.h#pragma once#include<stdio.h>#include<assert.h>#include<malloc.h>typedef int DataType ;typedef struct Node{ DataType data; struct Node* next;}Node, *PLinkList;void InitList(PLinkL

2015-12-06 17:35:46 382

原创 堆的实现及堆的各种应用

#include<iostream>#include<vector>using namespace std;template<class T>class Less //仿函数{public: Less() {} bool operator()(const T& l, const T& r) { return l < r; //实现小堆

2015-12-06 17:14:14 408

原创 用位图解决大数据存储

BitSet.h#include<iostream>#include<assert.h>using namespace std;class BitSet{public: BitSet(size_t N) //N表示存储数据的范围 { _size = N / 32 + 1; _arr = new size_t[_size]; me

2015-12-05 17:21:39 677

原创 线索二叉树

BinaryTreeThreading.h#pragma once#include<iostream>using namespace std;enum PointerTag{ LINK, //指针,指向左右孩子 THREAD, //线索,指向前驱或后继};template<class T>struct BinTreThrNode{ BinTreThrNode(co

2015-11-27 16:40:31 285

原创 二叉树的先序,中序,后序遍历

BinaryTree.h#include<iostream>#include<queue>#include<stack>using namespace std;template<class T>struct BinaryTreeNode{ BinaryTreeNode(T value = 0) :_value(value) ,_LeftChild(NULL)

2015-11-22 16:41:33 503

原创 广义表

GeneralList.h#pragma once#include<iostream>using namespace std;enum NodeType{ Head_Type, //头结点 Value_Type, //值节点 Sub_Type, //子表节点};struct GeneralListNode //广义表节点{ NodeType _type

2015-11-20 17:26:43 389

原创 稀疏矩阵的存储,及矩阵的转置

include“Matrix”#pragma once#include<iostream>#include<vector>using namespace std;template<class T>struct Triple{ T _value; size_t _row; size_t _col;};template<class T>class SparseMa

2015-11-13 17:14:11 708

原创 一个数组实现两个栈

#include<iostream>using namespace std;#define LEFT 0#define RIGHT 1template<class T>class DynamicArr{ template<class T> friend class Stack;public: DynamicArr(T* data = NULL) :_cap

2015-11-06 16:59:37 392

原创 求栈的最小值

#include<iostream>#include<stack>using namespace std;#define MAX_DATA 10000000template <class T>class MyStack{ stack<T> s1; //s1数据栈 stack<T> s2; //s2最小值栈public: void Push(const T& x)

2015-11-03 22:12:29 459

原创 迷宫

#include<iostream>#include<stack>using namespace std;#pragma warning(disable:4996)const int N = 5;//从文本中读取迷宫存入数组template<class T>void InitMaze(T** arr){ FILE* f = fopen("maze.txt", "r");

2015-11-03 20:55:48 449

原创 用两个队列实现一个栈

queue.h#include<iostream>#include<assert.h>using namespace std;template<typename T>struct Node{ template<class T> friend class Queue;public: Node(const T& x) :_data(x)

2015-10-24 21:23:23 291

原创 后缀表达式的计算

#include"seqlist.h"template<class T, class Container> //适配器模式class Stack{public: Stack() :_size(0) {} void Push(const T& x) { _con.PushBack(x); _size++; }

2015-10-22 22:46:52 508

原创 类模版实现动态顺序表

#include<iostream>#include<assert.h>using namespace std;#pragma warning(disable:4996)template<class T, int DefaultCapacity = 10>class SeqList{public: SeqList(T* data = NULL, size_t size = 0);

2015-09-19 15:15:28 493

原创 模拟c++的string类

#include<iostream>#include<assert.h>using namespace std;#pragma warning(disable:4996)#define DEFAULT_CAPACITY 5class String{public: String(const char* str = "") :_str(new char[strlen(

2015-09-06 21:51:36 742

原创 万年历

#include<iostream>using namespace std;class Date{public: // 初始化列表进行初始化。 Date(int year = 1900, int month = 1, int day = 1) //构造函数 :_year(year) , _month(month) , _day

2015-09-03 09:43:45 436

原创 string的写时拷贝

#include<iostream>#pragma warning(disable:4996)using namespace std;//class String//{//public:// String(char* str = " ")// :_str(new char[strlen(str) + 1]) //多一个字节存‘\0’// , _pRefcount

2015-08-28 20:31:48 662

1. 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。

1. 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。

2015-03-08

空空如也

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

TA关注的人

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