自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

满城丶琉璃月

记录学习生活,欢迎讨论交流......

  • 博客(46)
  • 收藏
  • 关注

原创 排序算法的代码

交换排序:快速排序(数组)//////============================交换排序:快速排序================//#include <iostream>using namespace std;void print(int a[], int n){ for (int i = 0; i < n; i++) { cout <...

2019-08-17 14:02:37 171

原创 中缀表达式:实现一个计算器

一、实现一个计算器使用两个栈:数字栈和符号栈通过优先级的判断做出相应的操作。“#”相当于在最外面加一对大括号,用其他符号也可以。#include <iostream>#include <string>#include <stack>using namespace std;int calculate(int a, int b, cha...

2019-08-17 13:52:16 588

原创 C++:构造函数、复制构造函数、运算符的重载(赋值运算符“=”的重载)、深拷贝与浅拷贝

关于构造函数、复制构造函数、运算符重载的语法这里不再赘述。下面说一下再使用这些东西时的注意事项。一、构造函数可以重载一个类可以有很多个构造函数,它们之间为重载关系,编译器会根据调用构造函数时的具体实参数目和类型选择合理的构造函数。二、复制构造函数被调用的三种情况:1.用一个类的对象初始化另一个对象的时候2.函数的参数是一个对象的时候,由于程序调用复制构造函数时有额外的开销,...

2019-03-26 10:13:38 944

原创 面试问题总结

3.25阿里电话面:1.计算机如何分配内存?堆和栈的区别,分配内存方面的速度如何?2.如何构建最大堆(大顶堆)和最小堆(小顶堆)?时间复杂度如何?3.C++中虚函数的实现机制?4.在C++的多态机制中,方法重载与方法重写的区别?5.TCP和UDP的优缺点和区别?...

2019-03-25 21:38:16 137

转载 C++:mutable 关键字

原文地址 博客园:http://www.cnblogs.com/yongdaimi/p/9565996.htmlmutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。我们知道,被const关键字修饰的...

2019-03-19 13:09:37 164

原创 《程序员面试宝典》第4版 第五章 程序设计基本概念

一、 赋值语句#include <iostream>using namespace std;int i = 1;int main(){ int i = i; cout<<i; return 0;}//执行结果是一个随机值,在我的电脑里是4229539这段代码看起来诡异,但确实可以执行,注意main里面的i和外边的i不是一个值。二、 ...

2019-03-19 00:43:12 111

转载 C++STL中的unique函数解析

转自博客园:原文链接:https://www.cnblogs.com/wangkundentisy/p/9033782.html原作者的这篇博文写的非常通俗易懂,做了个搬运工。一、总述unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会...

2019-03-19 00:42:05 177

原创 柳永词

柳永北宋著名词人,婉约派词人之一。原名三变,字景庄,后改名永,字耆卿,排行第七,又称柳七。人称“凡有井水饮处,皆能歌柳词”。1、雨霖铃·寒蝉凄切寒蝉凄切,对长亭晚,骤雨初歇。都门帐饮无绪,留恋处,兰舟催发。执手相看泪眼,竟无语凝噎。念去去,千里烟波,暮霭沉沉楚天阔。多情自古伤离别,更那堪,冷落清秋节!今宵酒醒何处?杨柳岸,晓风残月。此去经年,应是良辰好景虚设。便纵有千种风情,更...

2019-03-18 12:56:23 782

原创 反转字符串——递归版本和非递归版本

题目的要求就是输入一个字符串,然后输出它的逆序。递归版本:需要真正理解递归的精髓:压栈和出栈#include&lt;stdio.h&gt;#include&lt;string.h&gt;void reverse(char* str){ char tmp = *str;//用tmp存入 字符串的第一个字符 int len = strlen(str);//求当前字符串的长度 ...

2019-03-18 11:41:24 245

原创 实现单链表反转——递归版本和迭代版本

首先,关于递归的知识,可以参考我的这篇 递归:汉诺塔 关于单链表的知识可以参考我的这篇 单链表整表创建的两种方法(头插法和尾插法)本文中链表的结构定义如下:typedef struct Node{ int data; Node *next;} Node, *List;想要反转整个链表,可以考虑一个一个的结点从后往前反转,这就考虑到了递归与回溯,所以可以用递归实现...

2019-03-18 11:41:16 1259

原创 C/C++中关于数组的一个小问题

这个问题是我在做题的时候发现的,虽然是个很2的问题,但也是硬生生浪费了我两个小时才找到问题所在。废话就不多说了,看题!!!===============华丽分割线==================================================同志们觉得执行下面代码后程序的输出结果应该是什么?#include <stdio.h>int main()...

2019-03-18 11:40:56 166

原创 C语言:宏定义函数

通过一个比较函数的例子来说明宏函数和普通函数的区别:宏函数形式:#define MAX( a, b) ( (a) &gt; (b) (a) : (b) ) //这里为什么有这么多括号,后面会讲普通函数形式:int max(int a, int b){ return (a &gt; b a : b)}宏函数优点:节省空间(给形参节省)缺点:浪费时间(主要...

2019-03-18 11:40:46 25839 6

原创 const int* p 和 int* const p 的区别 以及 const 的其他用法

const int* p 中 const 修饰的是 *pint* const p 中 const 修饰的是 p关键是看const修饰的是什么技巧是看const和*的相对位置const在*左边,则指针指向的值不可改变;const在*右边,则指针本身不可改变;比如:const int * pOne (推荐)或者 int const * pOne;//指向整形常量的指针...

2019-03-18 11:40:28 497 3

原创 C/C++ 中变量的作用域和生存周期

关键字:static extern auto局部变量的作用域,起始于定义处,直到所在的大括号处结束。全局变量的作用域,起始与定义处,知道本文件结束。参考先看几段代码,理解了他们就理解了作用域的概念://===代码1=====#include&lt;stdio.h&gt;int main() { int a = 10; { int a ...

2019-03-18 11:40:18 384

原创 在Matlab、Code::Blocks、Visual Studio中代码注释和取消注释的快捷键

Matlab中:Ctrl+T 多行快速注释Ctrl+R 多行取消注释Code::Blocks中:Ctrl+Shift+C 多行快速注释Ctrl+Shift+X 多行取消注释Visual Studio中:Ctrl+K,然后 Ctrl+C 多行快速注释Ctrl+K,然后 Ctrl+U 多行取消注释...

2019-03-18 11:40:03 395

原创 七大排序算法之总结篇

七大排序算法指的是:冒泡排序、简单选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序关于这些排序算法的具体介绍和实现方法可参考下面这些链接:七大排序算法之简单算法系列(一)——冒泡排序七大排序算法之简单算法系列(二)——简单选择排序七大排序算法之简单算法系列(三)——直接插入排序七大排序算法之改进算法系列(四)——希尔排序七大排序算法之改进算法系列(五)——堆排序...

2019-03-18 11:34:58 123

原创 七大排序算法之改进算法系列(七)——快速排序

快速排序(Quick Sort):快速排序的原理:参考这篇 快速排序(过程图解)快速排序的代码实现:#include &lt;iostream&gt;using namespace std;void swap(int k[], int low, int high){ int temp; temp = k[low]; k[low] = k[high]; k[high...

2019-03-18 11:18:30 405

原创 七大排序算法之改进算法系列(六)——归并排序

归并排序(Merging Sort):归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。实际上就是将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归方法将排好序的半子表合并成越来越大的有序...

2019-03-17 19:22:26 386

原创 七大排序算法之改进算法系列(五)——堆排序

堆排序(Heap Sort):就是利用堆(假设利用大顶堆)进行排序的方法。堆排序可以看成是简单选择排序的一种升级版本。为了弄清楚堆排序,首先来学习几个概念,分别是堆、大顶堆、小顶堆堆是具有下列性质的完全二叉树:每个节点的值都大于或者等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于或者等于其左右孩子节点的值,称为小顶堆可见,根结点一定是堆中所有结点最大或者最小者,如果按...

2019-03-14 21:50:19 646

原创 七大排序算法之改进算法系列(四)——希尔排序

希尔排序(Shell Sort)希尔排序是由D.L.Shell于1959年提出来的一种排序算法。需要指出的是,在这之前排序算法的时间复杂度基本上都是O(n²)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。回想一下直接插入排序过程,排序过程中,我们可以设置一条线,左边是排好序的,右边则是一个一个等待排序,如果最小的那个值在最右边,那么排这个最小值的时候,需要将所有元素向右边移动一位。...

2019-03-12 17:05:48 323

原创 七大排序算法之简单算法系列(三)——直接插入排序

直接插入排序(Straight Insertion Sort)直接插入排序的基本操作:将一个记录插入到已经排好序的有序表中,从而得到一个新的。记录数增1的有序表。直接插入排序理解和实现起来都比较简单,又称为简单插入排序。方法就是,将待排的序列(无序表)中的元素一个个抽出,再逐个插入到已经排好的序列中(有序表)。C++代码实现如下:#include &lt;iostream&g...

2019-03-12 15:12:09 157

原创 七大排序算法之简单算法系列(二)——简单选择排序

简单选择排序(Simple Selection Sort)原理:通过n-1次关键字之间的比较,从n-i+1个记录中找到关键字最小的记录,并和第i个记录交换。在冒泡排序中,我们每次都做了交换,而这里我们不需要每次都进行交换,而是把最小的数和第i个记录交换。直接看代码进行理解。简单选择排序的代码实现:#include &lt;iostream&gt;using namespa...

2019-03-12 12:30:46 300

原创 七大排序算法之简单算法系列(一)——冒泡排序

冒泡排序(Bubble Sort)是一种交换排序冒泡排序的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。可以把冒泡排序理解为一种改进的交换排序算法。那么,就先从交换排序算法说起吧。其实,谈到排序算法,我们脑海中自然而然最容易想到的算法应该就是交换排序算法了。也就是利用两层循环内层循环探测到的元素与外层那个元素逐一比较,如果小就进行交换,这样每一趟就能...

2019-03-12 11:42:37 165

原创 读路遥《平凡的世界》感触

第十四章: 孙少安的姐夫卖老鼠药被认为“走资本主义路线”而被抓去劳教,孙少安一家人一筹莫展,再加上队里的一些麻烦事情使得孙少安更是身心俱疲,此时的他想救出姐夫只能去找发小田润叶帮忙,润叶的二爸是县里的干部,兴许能有些门路,凑巧润叶前不久托少安的弟弟少平带话叫他来城里见一面...... 少平见到润叶后,文中有这么一段描写;“……少安和润叶走在一起,就像他有时引着兰香...

2019-02-26 23:46:41 268

原创 马踏棋盘问题(骑士周游问题、跳马问题、哈密尔顿通路问题)

马踏棋盘问题描述:在国际象棋中,象棋盘由如下所示8*8的64个方格组成,将国际象棋中的一个马放在棋盘中的任意一个位置(马的走法如下图所示),问马是否可以用63步走遍棋盘的所有位置?哈密尔顿路径:图G中的哈密尔顿路径指的是经过图G中每个顶点,且只经过一次的一条轨迹。如果这条轨迹是一条闭合的路径(从起点出发不重复地遍历所有点后仍能回到起始点),那么这条路径称为哈密尔顿回路。实现这一...

2019-02-26 23:22:09 1700

原创 建立一棵二叉树

首先,要想建立一棵二叉树就要知道二叉树的三种遍历方法:前序遍历,中序遍历和后序遍历。不知道的可自行查阅。为了方便二叉树的表示,我们首先对二叉树进行扩展,将仅有空指针的结点变成虚节点,引入左右孩子(用^或#等符号表示),我们称这种变形后的二叉树为扩展二叉树。原二叉树扩展二叉树有了扩展二叉树,按照前序遍历的方法,上述树可写成AB#D##C##外面代码实现了二叉树的建立和前序...

2019-02-26 09:19:56 2718 1

原创 树结构的双亲孩子表示法

以如下形式的树结构为例:该树的深度为3, 其双亲孩子表示法如下:表中第一列为结点编号,第二列为结点数据,第三列为该节点的双亲编号(根节点双亲为-1),后面的单链表表示了该节点所有的孩子,从左至右依次进行遍历。 代码实现如下:#define MAX_TREE_SIZE 100typedef char ElemType;// 孩子结点typedef struc...

2019-02-25 11:05:58 3197

原创 词两首20180516

【定风波】苏轼(宋)莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。【译文】三月七日,在沙湖道上赶上了下雨,拿着雨具的仆人先前离开了,同行的人都觉得很狼狈,只有我不这么觉得。过了一会儿天晴了,就做了这首词。不用注意那穿林打叶的雨声,不妨一边吟咏长啸着,一边悠然地行走。竹杖和草鞋轻捷得胜过骑马,有什么可...

2018-05-16 23:41:25 192

原创 链表创建函数:形参用一级指针和用二级指针的区别

之前写一个链表创建的函数,在用typedef对结构体进行取别名的时候,了解到typedef关键字可以为一个结构体取两个别名,于是自己就尝试了一下///使用typedef定义结构体时可以为其起两个别名typedef struct List //定义结构体{ int num; struct List *next;}Node,*LinkList; //Node相当于结构体struct...

2018-05-15 16:35:40 1066 3

原创 利用栈的LIFO特点将二进制数转换为十进制数

栈的LIFO特点:我们知道“栈”这种数据结构具有后进先出(LIFO)的特点,也就是最后入栈的数据最先被弹出。那这跟进制转换有什么关系呢?进制转换原理:假如我们从键盘输入一个二进制数1101,先看人工是如何转换成十进制的?我们只需要将二进制不同位上的数乘上它相应的权值即可,也就是1*2^0+0*2^1+1*2^2+1*2^3=13。也就是最后被输入的数字权值最低。所以用计算机模拟的话,就是利用栈的L...

2018-05-15 15:33:41 556

原创 一首英文诗的不同版本翻译——感受中文的唯美与博大

【英文原文】You say that you love rain,but you open your umbrella when it rains...You say that you love the sun,but you find a shadow spot when the sun shines...You say that you love the wind,bu...

2018-05-15 12:12:40 10337

原创 用双向循环链表实现凯撒(Caesar)密码

凯撒密码简介:它是一种代换密码。据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为凯撒密码。凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成...

2018-05-10 23:52:00 998

原创 魔术师发牌问题

魔术师发牌问题的简介:一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下。说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样...

2018-05-08 17:12:26 347

原创 循环链表解决约瑟夫问题

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

2018-05-08 10:44:33 6058 1

原创 腾讯面试题:快速找到未知长度单链表的中间结点

题目:快速找到未知长度单链表的中间结点首先分析一下,既然是一个面试题,就一定有普通方法和高级方法,而高级方法无疑会为你大大加分!普通方法很简单:首先遍历一遍单链表以确定单链表的长度L。然后再此从头结点出发循环L/2次找到单链表的中间结点。普通方法的算法复杂度为:O(L+L/2) = O(3L/2)普通方法的实现代码:    #include&lt;stdio.h&gt; #include&...

2018-05-07 10:04:25 1115

原创 单链表整表创建的两种方法(头插法和尾插法)

线性表可分为顺序存储结构和链式存储结构顺序存储结构的创建,其实就是一个数组的初始化,即声明一个类型和大小的数组并赋值的过程。而单链表和顺序存储结构就不一样,它的每个数据的存储位置不需要像数组那样集中,它可以很散,是一种动态结构。对于每个链表来说,它所占用的空间大小和位置并不需要预先分配划定,可以根据系统的情况和实际的需求即时生成。所以,创建单链表的过程就是一个动态生成链表的过程。即从“空表”的...

2018-05-06 15:53:34 31632 4

原创 C语言:浅谈结构指针、以及向函数传递结构信息的两种方法

一、结构指针结构指针即指向结构的指针,为什么要使用结构指针,主要有一下三点原因:①就像指向数组的指针比数组不本身更容易操作(例如在一个排序问题中)一样,指向结构的指针通常比结构本身更容易操作②在一些早期的C实现中,结构不能作为参数被传递给函数,但指向结构的指针可以③许多奇妙的数据表示都使用了不包含指向其他结构的指针的结构介绍一个运算符(“-&gt;”),称为“间接成员运算符”这个运算符与指向结构或...

2018-04-23 13:05:10 1471

原创 C语言:Struct之结构数组以及结构的嵌套

一、结构数组为什么要使用结构数组?举个例子来说,假如我们定义了一个结构体book,显然每一本书都可以用一个book类型的结构体来描述。要描述两本书就需要用两个这样的结构变量,以此类推,如果我们要处理10本,100本,1000本...我们难道要一个一个定义吗?我们想到数组这种数据结构,它可以一次性分配一块内存用于存放多个数据,所以我们可以使用一个该结构的数组来存放这1000本(或者更多)的书。我们把...

2018-04-22 12:22:52 11589

原创 C语言:指针函数与函数指针

开场白:从字面上理解这两种概念函数指针:是指向函数的指针变量(即本身是一种指针)定义格式如下:数据类型标志符 (*指针变量名) (参数)void (*pf)(char *);//pf是指向函数的指针,void时函数返回值的类型,char*是函数参量的类型指针函数:本质是函数,只不过返回值为某一类型的指针定义格式如下:返回类型标识符 *返回的指针名称 (形参)void * pf(char *);//...

2018-04-21 11:54:26 248

原创 C语言中的结构变量(Structure Variable)以及Struct、Typedef的用法

关键字:Struct、Typedef运算符:.   (成员运算符)一、初步了解结构体有人说:程序 = 算法+数据结构程序设计中最重要的一个步骤就是选择一个表示数据的好方法。在多数情况下使用简单的变量或数组是远远不够的。C使用结构变量进一步增强了表示数据的能力。关键字 Struct 用于建立结构声明(structure declaration),结构声明是用来描述结构如何组合的主要方法。它把一些我们...

2018-04-20 22:33:34 4702

空空如也

空空如也

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

TA关注的人

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