数据结构
巩固一些基本的数据结构和简单算法。
wsj_
勤奋者,进步乎。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试常见算法——斐波那契数列
今晚八点,接受了某大厂的后台开发工程师的岗位电话面试。第一面而已,时常40多分钟,过程有顺畅的部分,也有很坎坷的部分。现在过了几个小时,感觉自己真的很差劲啊,还是要勤学苦练。一番反思之后,补个漏洞吧。也算是自己不白白被这一面。斐波那契数列问题:一个楼梯有n阶,一次走1步或者2步,请问到顶有多少种走法。分析:台阶数行走方式 & 行走次数11 121+1 / 2 231+1+1/1+2/2+1 34原创 2020-05-15 00:59:33 · 508 阅读 · 0 评论 -
C++实现简单的二分法查找/折半查找
二分法又叫折半查找。不断地折半长度知道找到要找的值使用场景:适用于已经排好序的顺序表。#include<iostream>int binarySearch(int* a, int low, int high, const int key){ while(low <= high) { //mid可以定义在while外面,while每次循环相当于不断地给mid进行赋值操作,但我还是喜欢不断的进行初始化操作。 int mid = (low + high) / 2;原创 2020-05-10 17:45:03 · 578 阅读 · 0 评论 -
C++实现经典冒泡排序以及冒泡排序的优化
直接码,边思考边写。排序入门之——冒泡排序#include<iostream>void swap(int* a, int* b){ int c = *a; *a = *b; *b = c;}int main(){ int a[10]={12, 23, 3, 14, 5, 6, 17, 8, 39, 11}; for(int i = 0; i < s...原创 2020-04-28 23:22:54 · 724 阅读 · 0 评论 -
C++判断一棵树是不是平衡二叉树(AVL树)
首先要知道什么是平衡二叉树。节点左子树和右子树的高度差不超过1的数叫平衡二叉树。应用场景:1.为了避免树的高度增长过快而影响二叉排序树的性能树的高度:从根节点到叶子节点依次经过的节点形成的路径,最长路径的长度值为树的高度。#include<iostream>int getTreeHeight(BiTree* tree);//声明获取树高度的函数//先写一个树...原创 2020-04-26 23:11:02 · 968 阅读 · 0 评论 -
C++实现二叉树后序遍历
二叉树的后续遍历,是先遍历左子树,在遍历右子数,最后遍历根节点。后续遍历的过程中我们需要借助栈来辅助#include<iostream>#include<stack>//先构建一个二叉树结构体struct BTreeNode{ int data; BTreeNode* lchild; BTreeNode* rchild;}void postOr...原创 2020-04-26 21:45:18 · 2320 阅读 · 0 评论 -
合并两个有序链表、合并k个排序链表
前面写过合并两个数组,然后采用归并排序对某个数组进行了排序。今天,合并两个链表也采取一样的思路,一直比较到末尾。k个?无非就是递归喽。直接边思考边写吧。我们由简入难。先来合并两个有序链表#include<iostream>//首先定义一个链表struct ListNode{ int data; ListNode* next;};ListNode* mergeTwo...原创 2020-04-23 22:30:28 · 313 阅读 · 0 评论 -
环形链表(找到环的入口)
之前已经判断一环形链表是否有环。顺其自然,我们需要找到这个入口在哪。#include<iostream>struct ListNode{ int data; ListNode* next;}static ListNode* pQuick, pSlowy; //static功能之一:对其他文件隐藏该变量或函数static ListNode* pSlowy;boo...原创 2020-04-23 21:30:49 · 564 阅读 · 0 评论 -
环形链表(判断一单链表是否有环)
判断是否有环,最长用的办法是利用快慢指针。慢指针:一步只走一个节点。快指针:一步走多个节点。在一个有环的链表中,如果有环存在,那么快慢指针各自不停的走,迟早会指向同一个节点。#include<iostream>//构建链表struct ListNode{ int data; ListNode* next;}bool isHasCycle(ListNode* ph...原创 2020-04-23 20:52:40 · 355 阅读 · 0 评论 -
C++用栈实现队列功能(push,pop,top,empty)
之前已经了解过了栈和队列的特性,再温习一下栈:先进后出,后进先出。队列:先进先出,后进后出。好,直接边思考边写代码#include<iostream>#include<stack>//先构建一个队列的类class MyQueue{public: void push(int data) //push要解决的问题就是:将栈操作中 后push进去的元素...原创 2020-04-22 23:20:55 · 1722 阅读 · 0 评论 -
C++用队列实现栈功能(push,pop,top,empty)
首先分析一下队列和栈的特点队列:先进先出,后进后出。栈:先进后出、后进先出。知道特性后,我们边思考边写。#include<iostream>//先声明一个栈类class Stack{public: void push(int data); int pop(); int top(); bool empty(); private: queue<int&...原创 2020-04-22 22:49:09 · 1298 阅读 · 0 评论 -
求最大子数组和
我们先来第一种简单的方法。——穷举所有可能性,返回一个最大的值。(该方法耗时O(n*n))#include<iostream>#include<vector>int getMaxSubArr(const vector<int> arr){ if(arr.size() == 0) { return 0; } if(arr.size() ==...原创 2020-04-22 22:19:12 · 273 阅读 · 0 评论 -
最简单的链表逆序
单链表的逆序也是我当年校招的时候经常别问到的一个数据结构。今天写个简简单单好理解的逆序。#include<iostream>//先构建一个单链表struct ListNode{ int data; //链表的data区 ListNode* next; //链表的指针区}LNode; //LNode相当于是一个别名(我记得是这样的,不保证哦)ListNode*...原创 2020-04-22 21:25:38 · 307 阅读 · 0 评论 -
归并排序、合并两个有序数组
今天写个简简单单的归并排序。顺带个合并两个有序数组。先来合并两个有序数组#include<iostream>#include<vector>vector<int> mergeTwoArray(vector<int> arr1, vector<int> arr2){ if(arr1.size()==0 && a...原创 2020-04-22 21:01:12 · 1341 阅读 · 0 评论 -
插入排序
插入排序和选择排序在我看来是一样的。选择排序是选取最小/大的元素依次插入;插入排序则是依次选元素,将每个元素插入到最合适的位置。时间复杂度: O(n*n)空间复杂度: O(1)#include<iostream>void InsertSort(vector<int> array){ //第一步总是先判断输入的合法性。 if(array.size() == ...原创 2020-04-19 23:42:33 · 175 阅读 · 0 评论 -
选择排序
所谓“选择排序”就是选择数组中最小/大的某个元素,插到合适的位置。老习惯,写个实用简单好理解的。当然也是我曾经校招给面试官写过的。时间复杂度:O(n*n)空间复杂度O(1)#include<iostream>//从小到大排序void selectSort(vector<int> array){ //判断容器不为空 if(array.size() == 0...原创 2020-04-19 22:51:57 · 174 阅读 · 0 评论 -
快速排序
写一个最简单的快速排序,也是我17年秋天校招时候给好多面试官写过的。简单好理解,不解耦的写法。#incude<iostream>using namespace std;void QuickSort(vector<int> array,int low,int high){ if(array.size()==0) return; if(array.size...原创 2020-04-19 22:18:11 · 187 阅读 · 0 评论
分享