自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树练习题

1.将搜索二叉树转换成有序的双向链表思路:由搜索二叉树的特点(左    中序递归,记录前一个结点(初始为空),前一个结点的右指向当前结点,当前结点的左指向前一个结点。Node* ToOrderedDoubleList() //将搜索二叉树转换成有序的双向链表(递归){ Node* prev = NULL; Node* head = _root; while(head &&

2017-01-03 21:26:09 2155 1

原创 排序算法总结

1.

2016-11-28 13:36:25 612

原创 STL中map和set详解

在STL中有这两个容器set和map,它们的特性都是:所有元素都会根据元素的键值自动被排序。下面来介绍一下这两个容器和与之相关的几个容器。一、set和map1.set和map的区别和联系:联系:它们的底层实现都是红黑树。区别:set是key形式的,set元素的键值(key)就是实值(value),实值就是键值。而map是key/value形式的,map的所有元素都是pair,同

2016-11-19 00:28:16 1623

原创 【平衡搜索树】AVL树

【前言】:之前学过了二叉搜索树,但是二叉搜索树有一个很大的缺陷,就是当当原本的数据有序或者接近有序的时候,这棵树的高度就为N(假设原本的数据个数为N),那么在搜索的时候它的时间复杂度(这里考虑最坏情况下的)就为O(N), 搜索的效率就比较低。那么,为了改进这个缺陷,我们就尽量让这棵搜索树变得比较平衡,降低它的高度,这样就可以提高它的搜索效率。AVL树一、定义:AVL树又称为高度平衡的二

2016-11-10 12:02:29 566

原创 【搜索树】二叉搜索树

二叉搜索树的实现:BinarySearch.h#pragma once#include using namespace std;template struct SearchBinaryTreeNode{ K _key; // 关键字(唯一) V _value; SearchBinaryTreeNode* _left; SearchBinaryTreeNode* _rig

2016-11-06 22:41:21 393

原创 堆实现 及 堆排序

1.Heap.h#pragma once#include #include #include using namespace std;template struct CmpGreat //建大堆{ bool operator()(const T& data1, const T& data2) { return data1>data2; }};template

2016-11-01 15:55:10 396

原创 【二叉树】线索化二叉树

#pragma once#include #include using namespace std; enum PointerTag{ LINK, THREAD,};templatestruct BinaryTreeNode_Thr{ T _data; BinaryTreeNode_Thr* _left; BinaryTreeNode_Thr* _right;

2016-10-26 19:34:26 440

原创 【二叉树】二叉树遍历及基本功能实现

二叉树的基本操作及前,中,后,层序遍历的实现#pragma once#include #include #include using namespace std;template struct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(c

2016-10-24 17:35:01 566

原创 【c++】析构函数中delete this指针

在析构函数中delete this指针,会产生什么样的结果呢?先看看下面这段代码,想想运行结果。#include using namespace std;class A{public: A() { cout<<"A()"<<endl; } ~A() { cout<<"~A()"<<endl; delete this; }};int main(){

2016-10-22 15:49:20 6146 2

原创 【栈应用】迷宫问题

迷宫问题:给定一个迷宫的入口,找出迷宫的一条通路。【解决办法】1.迷宫放在一个文件里,我们将迷宫读取出来存储在一个二维数组中, 用'0'来表示通路,'1'表示不通。2.每次探测当前位置的上下左右,如果是通路,压栈,继续探测;如果不是通路,从栈中弹出,回溯到上一个走过位置。3.利用二维数组下标的界限来判断是否找到出口。【代码】1.Maze.h#pragma onc

2016-10-22 13:49:25 1095

原创 【矩阵】对称矩阵及稀疏矩阵的压缩存储

1.稀疏矩阵//稀疏矩阵及其压缩存储#pragma once#include #include using namespace std;templatestruct Triple{ size_t _r; size_t _c; T _value; Triple(size_t row = 0, size_t col = 0, const T& value = T())

2016-10-17 22:40:24 1164

原创 【数据结构】广义表的实现

【前言】学完了顺序表,链表这些线性的数据结构,现在开始进入非线性的数据结构了。难度也比线性结构更大,本篇文章对广义表这种数据结构进行介绍并附上其实现的代码,广义表的实现主要应用递归,通过广义表可以更加理解和灵活使用递归,希望能给学习这块知识的朋友们带来帮助。一、广义表概念广义表是线性表的推广,是一种非线性的数据结构,也有人称其为列表。举几个例子:(1)A=()  //A是一

2016-09-24 15:25:22 2268

原创 【栈和队列】一个数组实现两个栈

学习了栈和队列的基本知识后,我们要利用这些基本知识实现出更多情况的栈和队列,下面通过一些面试题使我们更灵活的设计和使用栈和队列。1.利用一个数组实现两个栈思路:我们已经学过了栈和数组,数组是一块固定大小的存储空间,栈的栈底是固定的,通过栈顶来push,pop元素。(栈顶top指向栈顶元素)通过上面的图片,就能很清晰的看到,我们要用一个数组实现两个栈的话,数组的两

2016-09-17 12:31:53 1311

原创 【c++知识归纳】继承与多态(二)

在继承与多态(一)中简单介绍了继承与多态的基础知识,本文将从内存中深入理解c++的继承与多态。本文我选用了较低版本的IDE:【windows 10】系统的vs2008,因为高版本的处理比较复杂,为了看的更清楚,我们选择这个较低版本的编译器。1.虚函数表(虚表)class Base{public: Base() :_b(1) {} virtual void fun(

2016-08-26 04:50:50 636

原创 【c++知识归纳】继承与多态(一)

c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮助,如果有问题欢迎大家指出。一、继承1.什么是继承?为什么有继承?通过继承将有共同部分的、相互联系的类构成一种层次关系,共同部分组成的类一般在最顶端称为基类(父类),其他类直接或间

2016-08-24 02:45:19 3347

原创 git介绍及使用教程

前言:版本控制系统是一种记录一个或若干文件内容变化,以便日后查看特定版本修订情况的系统,分为三大类:本地版本控制系统,集中化版本控制系统和分布式版本控制系统。今天我们来学习使用一种分布式版本控制系统——git。一、git的功能简介:1.记录文件的所有历史变化2.随时可恢复到任何一个历史状态3. 多人协作开发或修改4.错误恢复5. 多功能并行开发二、g

2016-08-05 16:00:14 546

原创 【c语言】函数指针的用途

很多初学者学函数指针的时候都会想着学这个到底有什么用嘛,搞这么复杂。哈哈,其实它的存在必然有它的用途喽。下面介绍一下它的两个主要用途:(1)转移表  (利用函数指针数组实现)(2)回调函数机制  (利用函数指针实现,典型应用:qsort快排)下面我们就通过使用来熟悉一下它的这两个用途吧。1.转移表的应用简单计算器的实现#include #include

2016-08-04 23:19:13 2211

原创 c语言函数的可变参数列表

一、功能:为什么有可变参数列表呢?它可以实现一个神奇的功能:让一个函数在不同的时候可以接受不同数目的参数。二、实现要求:要实现这样的函数,我们需要使用一个va_list类型的变量和三个宏共同配合来访问我们的参数。要使用它们需要引用头文件#include 下面对他们做一下简单的介绍吧!va_list   其实就是 char*类型下面主要介绍一下这三个为宏:va

2016-08-03 10:36:34 922

原创 c语言字符串操作函数

字符串:由零个或多个字符组成的有限序列。在C语言库函数中,对字符串操作有一系列的函数。下面我们就自己模拟实现一些应用比较广泛的字符串操作函数。1.字符串拷贝函数

2016-07-19 17:40:32 631

原创 【c++巩固练习】c++实现日期计算器、日期万年历(日期类)

日期计算器的功能:1.可以计算两个日期之间相距多少天。例:2016.5.1-2016.4.1 =  302.可以计算一个日期经过n天后的那个日期是什么。例:2016.5.1+40 = 2016.6.10代码实现如下:(环境:vs2013   语言:c++)1.Date.h#pragma once#include using namespace std;class

2016-07-08 17:00:07 5189 1

原创 C/C++函数名称修饰规则及extern "C"的作用

一、函数名称修饰规则由于c语言不支持函数重载,而c++语言支持函数重载,所以c和c++的函数名称修饰规则是不相同的。 以下面这个Add函数为例,来探讨一下c和c++语言的函数名称修饰规则。int Add(int x, int y){ return x+y;}c语言的函数名称修饰规则: [window系统下vs2010]:(在映射文件.map中可以查看,需要右击当前

2016-06-26 19:50:13 4382

原创 整型数组里只出现一次的数字--[c语言笔试题]

找出数组内只出现一次的数字,是一系列的笔试题,来考察大家对位运算的掌握,下面我们从最简单的开始来看看吧!一、题目:一个整型数组里只有一个数字出现了一次,其余数字都出现了两次,请写程序找出出现了一次的数字。  如:{1,2,1,2,3},找出1看到这个题目时,我们容易想到异或运算的性质。异或运算相同为0,相异为1,则:a^a = 0; (1)0^a = a; (2)a^b^a

2016-06-19 15:00:54 4555 2

原创 C语言小项目--贪吃蛇游戏

一、贪吃蛇小游戏简介:        用上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,也不能咬到自己的身体,等到了一定的分数,就能过关。 二、函数框架三、数据结构typedef struct Snake{ size_t x; //行 size_t y; //列 struct Snake*

2016-06-15 00:48:44 17356 10

原创 链表面试题:判断链表是否相交(c语言)

一、问题描述:判断两个链表是否相交,若相交返回交点,否则返回空。由上图我们可以得出链表相交的两个结论:1.两链表相交,第一个相同的结点为链表的交点;2.两链表相交,从交点向后的所有结点都相同(合二为一)。二、解决思路方法一:直观法思路:依次判断第一个链表中的每个结点是否在第二个链表中出现。时间复杂度:O(Length(List1)*Length(List2))

2016-06-13 14:58:00 3365 2

原创 static 关键字的用法(c语言)

一、两个重要作用:1.修饰变量(1)作用域:a.静态全局变量:仅限于变量被定义的文件,从定义处开始到文件结尾处结束。(其他文件即使用extern声明也无法使用)要想在定义之前使用它,就必须在之前加extern ***语句。b.静态局部变量:仅在定义变量的局部作用域内。(2)生命周期:整个程序的存在周期。(3)存储空间:静态区(4)只被初始化一次下面,来看看下面这段程

2016-06-13 00:03:29 791

原创 静态顺序表实现简单的通讯录

一、通讯录实现要求:实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人 二、基本思路:      根据题目的要求,我选

2016-06-02 14:01:18 4380

原创 排序(三)之直接插入排序Straight Insertion Sort

一、直接插入排序的思想:

2016-06-02 13:26:44 893

原创 排序(二)之选择排序SelectSort

一、选择排序的思想       每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

2016-06-01 18:59:20 518

原创 动态顺序表

一、动态顺序表:       动态顺序表也是顺序表,不过它是动态的,也就是说它的容量是可以改变的,这就克服了静态顺序表容量不能改变的缺点。当顺序表的容量存满以后,我们可以对它进行扩容,概念就简单介绍到这里了。二、动态顺序表的数据结构:typedef struct SeqList_D{ DataType* array; //指向数据块的指针 size_t size

2016-06-01 13:32:35 718

原创 找链表的中间结点和倒数第k个结点(链表笔试题面试题)

一、问题查找链表的中间节点查找链表的倒数第k个结点二、解决思路:快慢指针找中间节点:快指针走两步,慢指针走一步找倒数第k个结点:快指针走k步或k-1步,然后慢指针再开始走三、代码实现(c语言)1.找中间结点sListNode* FindMidNode(sListNode* pHead){ sListNode* slow = pHead, *fast = pHead; while(fas

2016-06-01 00:05:32 441

原创 约瑟夫环

一、典故:      据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是商量了一个自杀方式:      41个人排成一个圆圈,由第1个人 开始报数,每数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,J

2016-06-01 00:05:29 402

原创 [c语言]单链表的实现

一、基础知识:链表(线性表的链式存储结构)(1)特点:逻辑关系相邻,物理位置不一定相邻。(2)分类:     a.不带头节点650) this.width=650;" width="983" height="135" title="$KI3SY_AD]I]G(@$7H6]8DV.png" style="width:707px;height:86px;" alt="wKioL1cd_omg3yZ-A

2016-06-01 00:05:27 904

原创 初级版迷宫问题(栈的应用)

/* (一)初级迷宫问题:  0:代表通  1:代表不通  求迷宫的通路 (二)步骤:  1.创建迷宫     * 从文件中读取迷宫     * 开辟二维数组存放迷宫  2.寻找通路     * 检查某位置是否为通     * 出口位置判断     * 走过的路用2标记     * 利用栈回溯 (三)问题  1.解决回溯中重复探测:递归  2.最优解:迷宫的最短通路

2016-06-01 00:05:24 724

原创 数据结构:模板实现栈和队列

(一)模板实现栈#pragma oncetypedef unsigned int size_t;template class Stack{public: Stack()  :_array(NULL)  ,_top(-1)  ,_capacity(0) {} ~Stack() {  if(_array)  {   delete[] _array;  } }publ

2016-06-01 00:05:21 491

原创 error C2533构造函数不能有返回类型

今天写程序时,一直出现这个错误,好头疼啊!!!    error C2533: “BigData::{ctor}”: 构造函数不能有返回类型 BigData::BigData(INT64 value) : _value(value){}   这个构造函数写的是正确的,没有返回值呀!!那为什么会报错呢??   这个问题困扰了我好几个小时,最后实在没办法,上网查了一下,发现竟然是一个很小的“;”

2016-06-01 00:05:18 829

转载 C++/C中防止头文件的重复包含的解决办法及区别

为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。  方式一:  #ifndef __SOMEFILE_H__//或写为#if !define __SOMEFILE_H__   #define __SOMEFILE_H__  

2016-06-01 00:05:15 15373

原创 注释转换

AnnotationConversion.h# pragma once#define _CRT_SECURE_NO_WARNINGS 1#include #include #include typedef enum State{ c_BEGIN, c_END}State;typedef enum RunState{ SUCCESS, FILE_WRONG, NO_MAT

2016-06-01 00:05:13 363

原创 静态和动态顺序表的实现(c语言)

(一)静态顺序表的实现 SeqList.h文件 #pragma once#define MAX_SIZE 1000typedef int DataType;typedef unsigned int size_t;typedef struct SeqList{ DataType array[MAX_SIZE]; size_t size;}SeqList; voi

2016-06-01 00:05:10 1181

原创 C语言:折半查找

//折半查找#include int dichotomy(int m,int arr[],int left,int right){ int mid; while(left <= right) {  mid = left - (left - right)/2;  if(m < mid)   right = mid - 1;  else if(m > mid)   left = 

2016-06-01 00:05:07 721

原创 C语言 猜数字游戏

#include #include #include void guess(){ int input = 0; int ret; srand((unsigned int)time(NULL)); ret = rand() % 100; printf("请输入0-100内的数字\n"); do {  scanf("%d",&input);  if(input < ret)

2016-06-01 00:05:04 860

空空如也

空空如也

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

TA关注的人

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