![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 59
BabysBreath_hl
切骄切燥
展开
-
C++模板实现双向循环链表(有带头结点)
带头结点的双向循环链表,头结点不存储有效数据,有效数据从头结点的下一个节点存储,代码中既实现了完整版的过程,又完成了简单优化。代码如下:#include#includeusing namespace std;templatestruct ListNode{ T _data; ListNode* _next; ListNode* _prev; ListNode(const原创 2017-02-18 21:03:17 · 968 阅读 · 0 评论 -
排序算法(中)--堆排序、计数排序
堆排序:堆排序是利用建堆过程中的向下调整算法,进行排序。升序排列时,应建立大堆,每次选出最大的堆顶的数,然后将堆顶的数据与最末端的数据交换,然后减小堆的大小,进行再次调整。重复以上操作即可。降序排列时,应建立小堆,与上述过程相同。大小堆:向下调整算法:我引用殷人昆老师数据结构里面的给大家看看思想。堆排序的代码为:void AjustDown(int* arr,原创 2017-05-25 01:07:47 · 1172 阅读 · 1 评论 -
经典排序算法-快速排序(挖坑法、前后指针法)、基数排序
快速排序在实际应用中是比较表现好的排序算法。快速排序我用两种方法实现它。第一种为方法,形象的称为:挖坑法基本思路:1、寻找pos位,然后将其分为两段数组,然后对这两段数组递归排序; 2、指定一个基数temp(三数取中法),定义两个指针begin一个指向起始位置,end一个指向最后一个元素的位置。begin寻找比基数(temp)大的数字,找到 后将b原创 2017-05-26 14:21:02 · 5105 阅读 · 0 评论 -
宏定义实现swap
宏定义在c++程序编译过程中,在宏替换过程中直接替换相关代码,效率会有很大的提升。今天谈一下SWAP交换的几种编写方式:原创 2017-07-04 15:47:14 · 3245 阅读 · 0 评论 -
模拟实现一个Stack 要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
模拟实现Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。思路:Min(返回最小值的操作)我们可以实现用一个辅助栈或者辅助数组来实现。用辅助栈来保存最小的值;考虑到数据的多样性,所以用模板来实现。代码实现:#pragma once#includeusing namespace std;#includet原创 2017-07-19 18:13:23 · 916 阅读 · 1 评论 -
求公司人最喜欢的前K种水果
本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养。由于水果种类比较多,但是却又不知道哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知已经将所有员工喜欢吃的水果存储于一个数组中。然后让我们统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果。 void GetFavoriteFruit(const vector& fruits,s原创 2017-08-02 09:58:22 · 517 阅读 · 0 评论 -
求一个无序数组的中位数
求一个无序数组的中位数。 如:{2,5,4,9,3,6,8,7,1}的中位数为5。 要求:不能使用排序。暂时只考虑奇数时的情况,偶数有时会规定相邻两个数的平均数。下面的分析都只考虑奇数的情况。思路1:对前(n+1)/2个数据建立大堆存储,然后用堆顶数据与后面数据进行比较,如果堆顶数据比后面数据大,则将堆顶数据与后面数据进行交换。,然后进行一次 向下调整算法,比较结束后,返回堆顶的数据。原创 2017-08-08 23:37:29 · 3799 阅读 · 0 评论 -
二维数组作为函数参数的调用
C语言编程的过程中,不可避免的会碰到二维或二维以上的数组作为函数的形参的情况,在以前的编程过程中,习惯了动态数组的应用,很是使用直接定义高维数组。最近在编程的过程中就碰到了这个问题:有如下的测试程序:voidtest(int **x,int Row,int Col);voidtest(int **x){ for(int i=0;i<Row;i++)原创 2017-07-25 10:52:41 · 3621 阅读 · 0 评论 -
链表K个节点翻转
题目描述:给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型。结果分析:题目思路:利用栈的先进后出的性质,1、将需要翻转的结点压入原创 2017-07-25 13:29:11 · 1147 阅读 · 0 评论 -
C++中智能指针-atuo_ptr、unique_ptr
先引入一个知识点即: RAII(Resource Acquisition Is Initialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针的出现就是为了更好地完成清理工作,最大程度的避免内存泄露等问题,正是资源分配实现的一种方法。智能指针就是自动管理指针所指向的资源的释放原创 2017-02-22 21:45:51 · 633 阅读 · 1 评论 -
剑指offer--入栈、出栈正确性的判断
判断元素出栈、 入栈顺序的合法性。 如: 入栈的序列(1,2,3,4,5) , 出栈序列为(4,5,3,2,1) 是合法序列, 入栈的序列(1,2,3,4,5) , 出栈序列为(1,5,3,2,4) 是不合法序列我的解题思路:创建一个辅助栈来模拟入栈与出栈过程,从而判断其入栈、出栈顺序是否合法。定义两个数组In与Out分别存储入栈序列与出栈序列,然后将栈序列的第一个元原创 2017-05-25 00:32:29 · 1347 阅读 · 6 评论 -
面试常见排序算法(上)
查找和排序是算法的的入门知识,其思想可用于很多算法当中,应用性比较常见。所以在面试中经常会问到排序算法及相关的问题。下来是我对这些简单排序算法的思想及其特点的整理。冒泡排序 冒泡排序是最原始的排序方式之一。它的原理就是通过相邻两个数的比较和交换将小的数字交换到最前面。这个过程类似于水泡上升的过程,因此而得名。举个例子:例如4,3,6,1,8;第一次8与1比较,无需交换;然后1与6原创 2017-05-12 18:58:43 · 1291 阅读 · 4 评论 -
malloc/free与new/delete的区别
一、malloc/free: 1、malloc的全称为memory allocation,中文解释为动态内存分配。 函数原型为:extern void *malloc(unsigned int num_bytes); 在c语言中,包含在#include或者#include; 2、函数声明:void *ma原创 2017-03-30 11:28:45 · 773 阅读 · 5 评论 -
C++实现无头结点的双向链表
typedef int DataType; //实现双向链表struct ListNode{ ListNode* _next; //设置结点,指向下一节点 ListNode* _prev; //设置结点,指向上一节点 DataType _data; //设置数据结点 ListNode(const DataType& x) //将const DataType转换为List原创 2017-01-25 18:18:01 · 688 阅读 · 0 评论 -
C++智能指针shared_ptr剖析
shared_ptr是c++智能指针中适用场景多,功能实现较多的智能指针。它采取引用计数的方法来实现释放指针所指向的资源。下面是我代码实现的基本功能。template<class T>class sharedptr{public: sharedptr(T* ptr) :_ptr(ptr) , _refCount(new int(1)) {} sharedp原创 2017-02-23 13:28:39 · 752 阅读 · 1 评论 -
有1,2,3,4四个数,能组成多少个互不相同且无重复数字的三位数?都是多少?
有c++简单解决: 在百位、十位、个位分别可以写入1,2,3,4只要三个位置的数字不相同就好。用代码实现:#include<iostream>using namespace std;int main(){ int i = 0, j = 0, k = 0, count = 0; for (i = 1; i < 5; i++) { for (j = 1; j原创 2017-02-23 20:59:20 · 7377 阅读 · 5 评论 -
C++实现多态原理探究
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现;5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包括至少一个纯虚原创 2017-02-15 19:50:41 · 728 阅读 · 1 评论 -
菱形虚拟继承
菱形继承在C++继承中是一种复杂的继承关系,存在着二义性和数据冗余的问题,而菱形虚拟继承则是为了解决菱形继承所存在的问题。为了探讨菱形虚拟继承如何解决该问题,我先建立个一个较为简单的菱形继承模型。下面分别是菱形继承和菱形虚拟继承的代码实现://菱形继承#include#includeusing namespace std;class AA{public: int _aa;};原创 2017-02-15 17:15:31 · 512 阅读 · 0 评论 -
简单文本的读取与写入
一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned ch原创 2017-03-09 11:10:52 · 503 阅读 · 0 评论 -
求范围内的素数
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。代码直接实现:#include<iostream>#include<cmath>using namespace std;int main(){ int n, m, count = 0; cin >> n >> m; for (int i = 2; count <= m;原创 2017-03-10 16:29:40 · 699 阅读 · 0 评论 -
文件压缩总结-哈夫曼树
详细源代码请移步下载:https://github.com/HsTime/file-campress 项目:文件压缩流程图 建立小堆代码:#pragma once#include<iostream>using namespace std;#include<vector>#include"huffman.h"template<class T>struct Less{ bo原创 2017-08-18 16:20:01 · 1335 阅读 · 0 评论