面试问题
奔跑的代码君
while(alive)
{
eat();
drink();
play();
study();
make_relationship();
code();
sleep();
}
展开
-
string类的实现
一,目标 此次目的很明显,实现string类中的主要方法,包括:构造函数,拷贝构造函数,+,+=运算符的重载等。 在实际的面试中,关于string的问题会很多,因此自己实现一遍很有必要。二,代码实现 1,首先看声明#pragma once#include<iostream>using namespace std;class MyString{ MyString(const cha原创 2017-09-14 17:01:30 · 462 阅读 · 4 评论 -
迭代器失效问题
1,问题的产生 请看下面这段代码:#pragma once#include<vector>#include<iostream>using namespace std;void test(){ vector<int> v1; v1.push_back(1); v1.push_back(3); v1.push_back(3); v1.push_back(原创 2017-09-24 19:09:15 · 285 阅读 · 0 评论 -
堆的创建
一,什么是堆? 堆,是二叉树(完全二叉树)(除过叶子节点所在的层,其余层都是满的)的一种,它同时又分为大堆和小堆。 大堆便是指:任意一个节点的值(非叶子节点)都大于它的左右孩子节点的值。 小堆:任意一个节点的值(非叶子节点)都小于它的左右孩子节点的值。 如下图: 二,堆的应用 常用的有堆排序,数据的查找;它也常被称为优先级队列,堆的性能与其高度有关原创 2017-09-08 20:22:33 · 423 阅读 · 0 评论 -
插入排序
一,目标 本节内容主要讲述了插入排序,包括直接插入排序与其改进版希尔排序(默认递增排列)。二,原理 //注:这里只提供算法相应的解释与实现过程,并不讲解其来历,以及一些具体的计算(如时间复杂度等),如有兴趣,请读者自行了解2.1 插入排序讲起插入排序,我想对于打过扑克牌的童鞋来讲是再熟悉不过了,每次揭牌的时候,为了使牌序清晰,你都会把最小的牌放到最左边(假定),然后比它大的次之。此刻你新揭了一张原创 2017-09-17 18:27:55 · 273 阅读 · 0 评论 -
哈希表
一,简介 哈希表,又称散列表,是一种容器,它的底层一般是数组实现,它可以快速定位一个元素,具有O(1)的时间复杂度。说到这就不得不提,哈希表的原理:哈希表是采用了函数映射的原理,设有函数f(x) (x>=0),则对于任意一个数m(m>=0) ,则有key=f(m),其中key值便是数组中的下标(key>=0),则f(x)便称为哈希函数,在查找一个元素的时候我们便可以通过哈希函数,找到该元素所在的下原创 2017-10-07 21:09:39 · 1227 阅读 · 0 评论 -
主要排序算法的比较及其优化
一,目的 本节内容主要讲了冒泡排序,插入排序,希尔排序,快速排序,并且提供了它们排序速度的比较,以及各自的优化。二,主要排序算法 1,冒泡排序 冒泡排序又称起泡排序(bubble),之所以称为起泡排序,是因为每次排序关键字较小的元素像水中的气泡一样逐步向上漂浮,而关键字较大的元素像石块一样下沉。 请看下图: 从上图我们可以看到:第一次,挑出9原创 2017-09-29 18:38:25 · 719 阅读 · 0 评论 -
双向链表
一,目的。实现无头双链表,并完成其基本的操作,包括插入,删除等。二,为什么有单链表了还要有双向链表?双向链表,顾名思义,相对于单链表,每个节点不仅要有指向其后继的指针,还有指向其前驱的指针。首先我们来看节点的定义:template<class T>struct Node{ T data; //节点的数据 Node<T>* _prev; //其前驱 Node<T>* _原创 2017-10-05 20:00:45 · 452 阅读 · 0 评论 -
链表的相应操作
一,目的 本节内容主要包括链表的排序,以及两个单链表的合并。二,分析。 在对链表排序的时候,可以采用选择排序等方法,对比原来的对数进行排序,此时的不同便是如今要对结点进行排序。而合并两个单链表,前提是两个单链表是有序的,这样合并完的单链表便也是有序的。三,代码实现struct Node{ int _data; Node* _next; Node(const int& x原创 2017-10-05 21:28:01 · 149 阅读 · 0 评论