C/C++
文章平均质量分 76
John__xs
刚入门的菜鸟级程序员
展开
-
【C++】虚函数和虚继承的内存分布情况
最近做题的时候经常遇到虚函数和虚继承的内存分布情况问题,自己也有点生疏了,所以,赶紧在这里回忆补充一下!先从一个类的内存分布情况开始看起:环境:VS2012class A{ int a;public: A() :a(1) {} void fun() { cout<<"A"<<endl; }};按照我的理解,内存中只有原创 2017-04-04 12:30:07 · 1155 阅读 · 0 评论 -
单链表面试题系列之链表相交问题
***单链表面试题系列之链表相交问题***// 链表相交示意图/* 判断链表是否相交的问题;(前提两个链表都不带环) 我这里有两种思路:方法一: 联系前面讲的带环链表问题,我们可以将链表2 链接到链表1的尾部,如果两个链表相交,则必然会带环;这样的话我们就可以通过前面讲的带环链表找入口点的方法去做了;这里给出链表带原创 2016-06-13 11:05:52 · 2056 阅读 · 0 评论 -
剑指offer 面试题
# 这两天通过做作业接触了《剑指offer》 这本书;觉得里面的面试题真是异常经典,当你看到那一道一道面试题时,对自我的做题笔试能力肯定会大有脾益!# 平常可以多做练习,养成一个习惯!好了,废话不多说了,直接上题吧! 我已经感到饥渴难耐了!# 第一道:/*剑指offer 面试题14:调整数组使奇数全部都位于偶数前面。题目:输入一个整数数组,实现一个函数原创 2016-05-02 14:15:24 · 3804 阅读 · 0 评论 -
拷贝函数和内存操作拷贝
关于几个库中的拷贝函数strcpy,strncpy,memcpy,memmove;那么现在开始一个一个实现吧!#include#include#include#include#define MAX 20/*关于指针传参时的断言和const修饰的习惯有必要养成比较常用的就是strcpy了;需要注意的是dest必须有足够的空间可以拷贝src中的字符串;*原创 2016-04-20 13:34:00 · 1726 阅读 · 0 评论 -
顺序表(静态开辟内存)
# 简单实现顺序表@ 本篇博客的顺序表类似于通讯录的静态实现:http://blog.csdn.net/bitboss/article/details/51374654@ 本篇博客用到的冒泡排序方法:http://blog.csdn.net/bitboss/article/details/51192704/*顺序表功能: EXIT原创 2016-05-25 10:57:13 · 1277 阅读 · 0 评论 -
冒泡排序算法的两种优化
冒泡排序(三种实现,两种优化)/*首先,我们先介绍BubbleSort; 就是冒泡排序,冒泡排序大家应该最熟悉不过了;冒泡排序算法的运作如下:(从后往前)1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3. 针对所有的元原创 2016-06-01 21:22:25 · 10032 阅读 · 7 评论 -
单链表
@ 今天写了整整6个小时,在不断的出错找错,修改中,终于将单链表初步成型了,真的很累,代码中没有多余的注释,现在的版本还是有很多地方可以改进,可是今天真的很累了! 后期的完善和优化好之后,会加上详细注释! 大家可以先看看思路! @ 单链表初成型# 自定义头文件"LinkList.h",包含一些函数功能的声明;#define _CRT_SECURE原创 2016-06-03 22:03:14 · 770 阅读 · 0 评论 -
顺序表(动态开辟内存)
# 动态顺序表@ 相关文章: 静态顺序表; @相关链接: 冒泡,直接插入,选择,排序的实现@文中关于三种排序的调用,运用了函数指针数组;函数指针数组博客链接@ 自定义头文件“pSeqList.h”#ifndef _SEQLIST_H__//防止头文件重定义#define _SEQLIST_H__#define _CRT原创 2016-06-01 21:31:28 · 1581 阅读 · 0 评论 -
单链表操作之删除倒数第k个结点
****单链表操作之删除倒数第k个结点****//函数功能:删除链表的倒数第k个结点;1//自定义的结点结构体和头指针结构体://函数原型:void DelKNode(pLinList pList, int k);ps:我在博客中每次的思路分析,只是将我的对每道题的理解和思考列出来,里面会有我做题时思考的经过,各种失败的尝试等等,希望我的原创 2016-06-10 18:28:44 · 5879 阅读 · 1 评论 -
单链表操作之查找中间结点
***单链表操作之查找中间结点***//查找链表的中间结点;//自定义的结点结构体和头指针结构体:#include#include#include#includetypedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode* n原创 2016-06-08 22:50:12 · 4763 阅读 · 0 评论 -
单链表操作之合并两个单链表
***单链表操作之合并两个单链表***/* 本篇博客为合并两个单链表, 有序和无序都可以; 其中用到单链表的尾插和单链表的选择排序;@单链表排序之选择排序链接:http://blog.csdn.net/bitboss/article/details/51602544;代码中大部分操作都在单链表基本操作详解中介绍过,这里就直接上代码;*/原创 2016-06-08 14:01:13 · 10136 阅读 · 0 评论 -
单链表操作之反转单链表
***单链表操作之反转单链表***//反转单链表,只能遍历一遍链表// 定义的结点结构体和头指针结构体:typedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode* next;}LinkNode,*pLinkNode;//结点结构体typed原创 2016-06-08 09:46:56 · 3032 阅读 · 0 评论 -
单链表操作之在当前节点前插入一个元素
***单链表操作之在当前节点前插入一个元素***//在当前结点前插入一个元素,没有给头指针;//定义的结点的结构体和头指针的结构体;typedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode* next;}LinkNode,*pLinkNod原创 2016-06-08 08:37:16 · 12832 阅读 · 2 评论 -
单链表操作之删除链表的一个非尾结点
***单链表操作之删除链表的一个非尾结点***/* 删除链表的一个非尾结点;没有给头节点;多么经典的一道题,但是第一次看到这道题的时候是有点懵,想着是从头找到该节点,然后删除,直接忽略了没有给你表头的事实,然后回过头来再思考思考,其实这道题也蛮简单的,既然给让你删除非尾结点,那么它的后面肯定还有结点,只要把这两个结点的data交换一下,然后删除后面的那个结点不就好原创 2016-06-08 00:23:59 · 2433 阅读 · 0 评论 -
直接插入排序
>直接插入排序/*InsertionSort(直接插入排序):在日常生活中,经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。例如:一组从小到大排好顺序的数据列{1,2,3,4,5,6,7,9,10},通常称之为有序列,我们用序号1,2,3,…表示数据的位置,欲把一个新的数据8插入到上述序列中。完成这个工作的步骤:①确定数原创 2016-06-03 07:49:23 · 2591 阅读 · 1 评论 -
选择排序
> 选择排序/*SelectSort:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后原创 2016-06-03 08:01:36 · 650 阅读 · 0 评论 -
单链表基本操作详解
# 单链表基本操作文中提到的内容的链接一并列在这里:顺序表:http://blog.csdn.net/bitboss/article/details/51559175冒泡排序:http://blog.csdn.net/bitboss/article/details/51559034选择排序:http://blog.csdn.net/bitboss/原创 2016-06-04 22:12:46 · 6808 阅读 · 4 评论 -
单链表面试题系列之带环链表的入口点
***单链表操作之带环链表的入口点***// 本篇博文阐述如何找到带环链表的入口点,那么,首先有必要阐述一下什么是带环链表?如何判断链表是否带环?带环链表: 即链表中有循环的部分,通俗的说就是没有尾节点!例如:判断链表是否带环:那么知道了什么是带环链表,接下来就是判断链表是否带环的判断问题了,其实也很简单,首先最简单的是判断出不原创 2016-06-12 19:46:18 · 5044 阅读 · 1 评论 -
单链表面试题系列之约瑟夫环
***单链表面试题系列之约瑟夫环***约瑟夫环约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围,从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从1~n,最后结果即为原问题的解。关于原创 2016-06-14 00:36:25 · 2327 阅读 · 0 评论 -
C++学习-----类型萃取
类型萃取本篇博客主要讲述内容: 1. 什么是类型萃取 2. 模板的特化 3. 类型萃取的代码实现(模板特化的应用)----------------------------------------------------- 在C++中我们通常通过typeid (是一个函数)来提取; 但是只能获得类型,并不能用来声明变量; 于是就产生了类原创 2016-09-09 17:13:44 · 1248 阅读 · 0 评论 -
C和C++的区别和联系(扩展知识)
2017/3/17 复习整理:C/C++区别与联系;关于C和C++的区别是面试中经常会被问到的问题,本着即将面试的心态,进行知识整理,并对小知识点进行扩展;C/C++的联系:C++是C的超集,兼容大部分C的语法的结构; 联系嘛我只能想到这个,毕竟cplusplus嘛!C/C++区别:第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,一般简历上第一条都原创 2017-03-17 13:26:48 · 43964 阅读 · 13 评论 -
二叉树相关编程题总结
关于二叉树的五道面试题的总结求二叉树的最远两个结点的距离;由前序遍历和中序遍历重建二叉树;判断一棵树是否是完全二叉树;求二叉树两个节点的最近公共祖先;将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 注:本篇博客就这五道面试题,并不是单纯的给出求解代码,而是全面的进行分析,并进行问题的延伸,在求解过程中对问题的延伸都有代码的实现,so!原创 2016-12-01 17:18:54 · 6319 阅读 · 2 评论 -
程序化银行家算法
代码实现银行家算法代码呢,因为我现在一直在写C++代码,而我又觉得这个银行家算法的过程性比较强,所以呢就造就了这个面向过程的程序,C++的底子的程序,因为课设需要,顺便练练手,大约用了两个小时完成这一程序,所以,代码比较粗糙,不过呢,用起来还不错了!比较粗略的代码逻辑图: 代码实现:#include<iostream>#include<vector>using namespace std;//原创 2016-12-21 19:23:28 · 1712 阅读 · 0 评论 -
C++中RTTI与dynamic_cast
前言: 最近看了好些个关于C/C++类的书籍,其中几乎每本都会提到C++的类型强转,然后每本书讲的深浅不一,其中《编写高质量C/C++代码的 150个建议》其中有一段对dynamic_cast的举例说明中出现了陈述错误,可能是作者的失误,将static_cast和dynamic_cast的情况说反了,但是这让原本以为对dynamic_cast还算了解我,瞬间懵逼,难道我原来是记错了? 遂百度求证之原创 2016-12-11 21:32:01 · 4438 阅读 · 4 评论 -
二叉树的遍历方式(递归)
二叉树的遍历方式(递归)博客摘要:博客链接:非递归遍历二叉树 1.什么是二叉树的遍历? 四种遍历是什么? 2.递归的实现二叉树的遍历; (下一篇博客将讲述三种遍历的非递归实现)一. 什么是二叉树简述:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。例如下图: 二.四种遍历本篇博客讲述二叉树的四种遍历:前序遍历,中序遍历,后序遍历,层序遍历原创 2016-10-01 14:32:46 · 2394 阅读 · 3 评论 -
遍历二叉树(非递归)
遍历二叉树(非递归)博客链接:递归遍历二叉树语言 = C++; 博客摘要:回顾层序遍历的遍历方式采用非递归的方式遍历二叉树; 主要三种遍历方式: @前序遍历 @中序遍历 @后序遍历在上一篇博客中我们提到了遍历二叉树的四种方式:前序遍历中序遍历后序遍历层序遍历其中前三种采用了递归的方式,而层序遍历采用的是非递归的方式,为我们本篇博客坐了铺垫;我们先来回忆一下层序遍历的大体过程原创 2016-10-03 20:06:21 · 976 阅读 · 0 评论 -
稀疏矩阵的快速转置算法
稀疏矩阵的快速转置算法在描述稀疏矩阵的快速转置算法之前,先了解什么是稀疏矩阵和什么是稀疏矩阵的压缩存储;稀疏矩阵的压缩存储什么是稀疏矩阵? /* 这是大学的以么课《线性代数》学的,不知道大家还记得多少,在老师讲到实现稀疏矩阵的压缩存储的时候,我知记得 我当时考了75分,其它的就呵呵了-_-!!! 言归正传,稀疏矩阵,例如:--------------0 0 2 0 40 0 0 0 00原创 2016-09-28 09:09:09 · 12308 阅读 · 3 评论 -
双向链表(迭代器)
//双向链表(迭代器)#include<iostream>#include<cassert>using namespace std;//链表结点template<class T>struct _ListNode { _ListNode* _prev; _ListNode* _next; /*void* _prev; vo原创 2016-09-21 19:26:37 · 2748 阅读 · 3 评论 -
稀疏矩阵的压缩存储
稀疏矩阵的压缩存储coad = C++;什么是稀疏矩阵? /* 这是大学的以么课《线性代数》学的,不知道大家还记得多少,在老师讲到实现稀疏矩阵的压缩存储的时候,我知记得 我当时考了75分,其它的就呵呵了-_-!!! 言归正传,稀疏矩阵,例如:--------------0 0 2 0 40 0 0 0 00 1 0 3 05 0 6 0 0--------------上面这个就原创 2016-09-20 20:49:15 · 2237 阅读 · 0 评论 -
C++学习------模板
模板 本篇博客阐述主要内容有: 1.模板的定义 2.模板函数 3.模板类 4.C++容器----------------------------------------------------- 模板:望文生义,就是一个模子,在C++中提供重用源代码的方法; 函数的重载,就是解决函数接收不同类型的参数的问题而产生的,但原创 2016-09-08 09:01:45 · 714 阅读 · 0 评论 -
浅析智能指针二
浅析智能指针二 本篇博客继《浅析智能指针一》 继续对智能指针的理解进行分析; 主要简述要点:shared_ptr智能指针不能解决的问题:循环引用问题; weak_ptr解决循环引用的问题; 模拟定制删除器的实现;-----------------原创 2016-09-07 09:03:35 · 759 阅读 · 0 评论 -
判断出入栈的合法性
本篇博客阐述内容:通过已给的入栈和出栈序列判断是否匹配(即是否合法)这其实是个简单的问题,我们不对有重复的情况做考虑;既然是对出栈顺序进行检测,那很简单,我们让入栈序列入栈 让出栈栈序列去匹配,最后如果两个序列都结束了,那就说明匹配了; 假设入栈序列是{1,2,3,4,5} 出栈序列是{4,5,3,2,1} 那么我们让入栈序列入栈,1先入,看一看第一个出栈的是不是1,不是继续将原创 2016-09-20 08:26:39 · 2379 阅读 · 0 评论 -
浅析智能指针一
// 浅析智能指针 // 本篇博客主要讲述进来学习C++中关于智能指针的理解// 何谓智能指针? 所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放;// boost库中和STL库中都有关于智能指针的include文件; 常见的智能指针有:// auto_ptr/scoped_ptr/scoped_array/shared_ptr原创 2016-09-04 15:50:24 · 807 阅读 · 0 评论 -
面试题之用两个栈实现一个队列
本篇博客主要讲述内容:面试题之用两个栈实现一个队列实现思路:用两个栈实现一个队列 类似于两个队列实现一个栈,就主要体现出队列的“先进先出的”原则,即实现push和pop两个操作;主要实现难点思路分析:实现Pop时就稍微有点技巧,如果s2不为空,则直接pops2,为什么呢?很简单,如果s2不为空,说明经过上次pop之后,剩余的s2并没有还给s1,那s2的栈顶元素是不是目前最先进入队列的元素! 比如:原创 2016-09-13 15:46:43 · 1512 阅读 · 0 评论 -
面试题之两个队列实现一个栈
本篇博客主要阐释内容:面试题: 使用两个队列模拟实现一个栈#include<iostream>#include<queue>//用两个队列实现一个栈 //这道题的目的在于让我们利用队列先进先出的原则实现栈“后进先出”的原则; //所以这里只模仿实现 push,pop,和top三个操作;代码实现原理: 首先得了解队列的特点:先进先出。 既然是两个队列实现一个栈,很明显是让你通过俩个队列互相倒原创 2016-09-13 15:36:06 · 1744 阅读 · 0 评论 -
寻找迷宫出口<一>
寻找迷宫出口小程序目的: 判断在一个10*10的矩阵中是否可以找到迷宫的出口;PS:程序功能比较单一,还有许多可以改进的地方,比如,可以寻找出口的最优路径,可是我现在没有想出来,所以,在 寻找迷宫出口 我会对迷宫问题做出进一步的完善!---------------------------------------------------------原创 2016-09-10 11:41:42 · 4352 阅读 · 0 评论 -
位运算之只出现一次的的数字
****************位运算系列之数组中只出现一次的数字******************//题目(1):在一个数组中只有一个数字出现一次,其他数字都是成对出现的!让你找出这个只出现一次的数字,//其实,这也叫缺失的数字,用来找成对数组中里有一对数字缺失了一个数字的数组成员!/* 那么,现在先来分析一下,一般情况下,我们最先想到的原创 2016-06-06 11:15:02 · 1901 阅读 · 0 评论 -
单链表排序之选择排序
***单链表排序之选择排序***/*前段时间刚学会几种排序方法,最近学习了单链表,就用来试试,本篇链表的排序方法讲述的是单链表的选择排序;(注意:请仔细看准节点结构体的包装和头指针的包装再阅读以下代码);选择排序的基本思想:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”原创 2016-06-07 11:36:57 · 19732 阅读 · 9 评论 -
关于模拟实现strlen
面试中会遇到的strlen避免和库中的函数冲突,函数都命名为my_strlen;//1.首先是常规实现方法#include#include#includeint my_strlen(const char* str) //关于const,后面学到C++时会详细写一篇const的博客。{ int count = 0;//设置计数器 assert(str);//断言 参数指原创 2016-04-19 12:49:57 · 713 阅读 · 0 评论 -
面试题<数组中的逆序对>(12)
# 面试题: 数组中的逆序对/*//题目: 在数组中的两个数字如果前面一个数字大于后面的数字,则////这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。////例如 {5,4,3,2,1}中的逆序对数为10; */这道题比较简单,我就直接上代码了,不过方法不是最简单的;#include#includeint R原创 2016-05-26 15:03:16 · 755 阅读 · 0 评论