自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Eyoru的博客

Fake it till U make it

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

原创 Element UI主题换肤功能(基于vue-element-admin框架)

2022-08-05 本次实现的是基于vue-element-admin前端框架实现的主题换肤功能。具体功能为预设几种配色方案,点击切换主题后:elementUI主题色、侧边栏及svg图标、具体路由页面中指定元素也会随之改变。将分为以下三步来逐步实现完整的主题换肤功能。各位可根据自己的需求分步观看。...

2022-08-05 15:57:23 4769 2

原创 微信小程序:各种Tab栏

时隔这么久,终于又开始写博客了:P。本文记录的是本人在做微信小程序的时候,自己实现的几种tab栏。排序从简单到复杂。我实现了以下几种:最普通的Tab。点击变色并切换,无过渡。带滑动效果的Tab,配合swiper实现的。滑动条跟随滑动进度的Tab,是第二种的进阶版。但不推荐使用。一、最普通的Tab效果图如下:做这个效果并没有什么难点。通过js变量控制点击态,来确定是否需要acti...

2020-02-23 22:00:28 8105 4

原创 C++智能指针:auto_ptr详解

指针,相信大家并不陌生。无论是我们在进行查看内存还是在修改字符串,我们都会用到指针。最常见的情况则是我们使用malloc或者new申请到了一块内存,然后用一个指针来保存起来。我们都知道有内存的申请那就必须要对它进行释放的处理,否则会造成最严重的后果——内存泄漏。一个或者两个申请的内存我们或许不会忘记去释放,但是如果成千上万行代码,你还能记得住哪个释放了哪个没有释放吗?而智能指针就是为了解决...

2018-11-13 14:05:42 12013 4

原创 二叉树遍历:前序,中序,后序,层序的递归以及非递归实现

树,是一种在实际编程中经常遇到的数据结构,它的逻辑很简单:除根节点之外每个节点都有且只有一个父节点,除叶子节点之外所有节点都有一个或多个子节点。我们说的二叉树,就是指子节点最多2个的树。二叉树中,最重要的操作就是遍历。二叉树的遍历分为:1.前序遍历:先访问根节点,再访问左子节点,最后访问右子节点。2.中序遍历:先访问左子节点,再访问根节点,最后访问右子节点。3.后序遍历:先访问左子...

2018-10-06 16:12:59 3473 2

原创 C++实现用两个栈模拟一个队列

问题描述用两个栈来实现一个队列,队列的声明如下,实现其中的两个函数,分别完成在队列尾部插入节点和在队列头部删除节点的操作。声明:template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& eleme...

2018-09-27 12:48:52 1869

原创 数据结构:AVL树的平衡调整——LL,LR,RL,RR

AVL树的全称是平衡搜索二叉树,本质上也是一个二叉搜索树(BST),满足BST树的所有性质。但是我们在使用二叉搜索树的时候,我们知道通常情况在BST中搜索一个节点的时间复杂度是O(lgn)。最坏的情况为O(n),这种情况就是出现连续的左子树/右子树,如下图所示:这种情况其实就已经是链式存储,无法将树的优势体现出来。为了避免这种情况,我们就要保证这个树随时都是平衡的。当然要求不能...

2018-09-26 01:27:47 10345 3

原创 TCP/IP三次握手、四次挥手

我们在使用互联网和别的网站进行通信的时候,都要依赖TCP/IP协议。甚至有时候网不太好,浏览器会显示当前状态:正在与某某网站握手...当网络状态很好的时候,就会一闪而过。本文将详细总结笔者在学习三次握手四次挥手时的各个状态以及过程。首先,状态图如下。 3次握手初始时,客户端和服务端都是CLOSED状态。这时,客户端请求连接,作为整个三次握手的开端。1.客户端向服务器端发...

2018-09-16 23:12:25 315

原创 排序算法5:堆排序

简介堆排序是利用堆这种数据结构进行的排序。堆通常使用一维数组来实现,是一种近似完全二叉树的结构。堆排序分为大根堆和小根堆。堆排序满足这样的一个特性:大根堆父节点的值总是大于子节点,小根堆的父节点值总是小于子节点。思想我们在拿到一个数组时,首先将它构造成为一个大根堆/小根堆,这个过程我们叫做建堆。然后将根节点元素和最末尾元素交换,此时最末尾成为有序区。除去最末尾元素的剩下元素所构...

2018-09-05 16:48:05 340

原创 排序算法4:归并排序

简介归并排序是冯诺依曼在1945年提出的一种有效的排序算法。它的时间复杂度是O(nlogn),空间复杂度O(n),它是一个稳定的排序。思想正如它的名字,归并排序是建立在归并操作上的。所谓归并就是将两个已排序序列合并成为一个序列的操作。对于归并我们使用一个函数(Merge)来实现,具体步骤如下:①首先申请空间,大小为两个已排序序列之和;②定义两个指针,分别指向两个序列的起...

2018-08-29 23:32:08 406

原创 排序算法3.5:希尔排序

简介希尔排序是插入排序的一种更高效的改进算法。对于插入排序来说,最好的情况是待排序数组本身已大部分有序或完全有序。此时进行排序接近线性排序,时间复杂度为O(n)。希尔排序的目的,就是将数组最后转换为这样的形式 ,使得插入排序的效率更高。先宏观调整,再微观调整。关于希尔排序中最重要的变量是步长,它是逐渐减小的,每一趟排序的步长都必定比上一趟小,最终成为1.根据步长将原数组分为小段,对每一...

2018-08-27 23:40:49 287

原创 排序算法3:插入排序,二分插入排序

简介插入排序是一种与冒泡、选择排序略微有些不同的排序算法。它的主要思想可以形象的模拟为打牌时从牌堆中抓牌后,整合入手牌中的过程。它的时间复杂度为O(n^2),最好情况下可以达到O(n)。空间复杂度为O(1),它是一种稳定的算法。思想我们前面讲的冒泡和选择排序它们都是外层使用for循环中的变量i来维护已排序的数字,然后在未排序数列中进行操作(冒泡是直接交换,选择是选出需要交换的元...

2018-08-26 23:08:51 925

原创 排序算法2:直接选择排序

直接选择排序算法也是一种简单直观的算法,而且与冒泡排序算法只有一些小小的区别。它的时间复杂度是O(n^2),空间复杂度O(1),它是不稳定的排序。(在数组中不稳定,在链表中稳定)基本思想之所以叫它直接选择排序,是因为它的思想就是在每一趟排序中首先定义一个标识(该标识的位置就在未排序队列的队头)用来记录未排序序列中最大(小)值的所在位置,排序过程中直接将未排序序列中最大(小)的值选择...

2018-08-21 23:21:37 2284

原创 C语言和C++的区别

c语言虽说经常和c++在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C++是C++99标准的。C89就是在1989年制定的标准,如今最新的是C11和C++11标准。根据不同的标准,它们的功能也会有所不同,但是越新的版本支持的编译器越少,所以本文在讨论的时候使用的C语言标准是C89,C++标准是C++99.我们来介绍C语言和C++中那些不同的地方。1.函数...

2018-08-02 00:12:28 289228 28

原创 C语言类型转换

有一道非常经典的问题,相信大家绝对都见过 :unsigned int a = 1;char b = -1;char c = a>b?'a':'b';cout << c <<endl;输出结果是b。原因也显而易见,a和b进行比较的时候当然要保持类型一致,这里把char类型转换成unsigned int类型。由于无符号整形中不存在负数,-1就被转换为一个很...

2018-08-01 12:58:19 487

原创 函数调用:栈帧的开辟与回退

一份源文件是由数据和指令组成的,函数通常作为指令和数据的集合被人们创造出来实现各种功能。就是这个我们天天在调用着的函数,你有没有想过:1.我们在调用它的时候系统做了什么?2.main函数中如果还有另一个函数,在跳转后运行完这个函数时,编译器怎么知道下一行执行哪个语句呢?会不会又从头执行了?3.函数在结束之后(运行到反花括号“}”处),系统又是怎么处理的?4.不同的语言对函数形参内存...

2018-07-25 23:57:54 1585 3

原创 编译和链接详解

  在我们将源代码打好以后,检查无错,点下“编译并执行”按钮。控制台输出一行又一行,程序随即正常的运行起来。这是编码的日常。  那么你有没有想过,在这份代码变成一个可以跑起来的程序的过程中,它都经历了什么呢?有人说简单啊,不就是先编译再链接么。本文就详细的对编译链接的过程进行分析,里面或许真的有你不知道的东西呢。 我们先大体地概括一下:假设我们现在辛辛苦苦写好了一份代码,它的文件名叫做...

2018-07-24 10:22:42 5216

原创 虚拟地址空间布局——基于x86体系32位下Linux系统

 我们知道,一个可执行文件运行起来的话它就变成了进程。在x86 32bit Linux下,我们的系统会给每个进程分配一个4G大小的虚拟地址空间。你可能会说,我电脑总共就4g内存这每个进程都给4g怎么可能啊。注意虚拟两个字。那么这块空间里都装了什么东西呢?其中前3G内存是用户空间,最后1G是内核空间。所有的进程有各自的用户空间,但所有的进程都共享一个内核空间。不要着急,我们从上到下挨个来...

2018-07-23 21:29:20 1997

原创 内存对齐&结构体大小的计算

在我的博客《C语言的预处理详解》中最后一段,讲到了#pragma预处理符,其中有一个参数的使用就是#pragma pack(n)。这个参数的意义就是告诉编译器,令编译器按照n个字节进行对齐。什么又是对齐呢?为什么会有这个东西呢?听我细细道来。什么是内存对齐?先看下面的结构体。struct TestStruct1{ char c1; short s; ...

2018-07-18 23:03:34 3025 3

原创 C语言的预处理详解

说到预处理,大家绝对不会觉得陌生。因为我们在开始编写一份程序的时候,从键盘录入的第一句话:#include <stdio.h>这里就使用了预处理,引入头文件。同时在文件开头我们常见的#define ,#ifdef,#pragma之类的都属于预处理。 那么,我们在此先提出几个问题:1.预处理是C语言的一部分吗?2.包含#号的都是预处理吗?3.预处理指令后面是不...

2018-07-18 00:45:50 33702 7

原创 大端存储和小端存储及基于c语言的测试函数

1

2018-07-15 23:14:48 1053

原创 C语言中的32个关键字及部分讲解

说起c语言中的关键字,大家印象最深的可能就是int,double等定义一个数据变量时所使用的关键字了。但是除了这些数据类型的关键字还有哪些呢?for?while?没错,这些确实都是,但是并没有一个系统的总结。本文笔者就将就c语言学习中所遇到的共计32个关键字进行整理。请善用搜索功能。 首先是对关键字的罗列以及相应的简介:auto                    声明自动变量 缺省...

2018-07-13 21:52:18 10286 3

原创 C#中的虚方法、抽象方法、抽象类以及接口

众所周知,C#作为一门OOP(面向对象程序设计)语言,在许多地方都有与C++相似的地方,然而也有很多不同的地方。说到面向对象,脑袋里第一反应当然就是面向对象的三大原则(java中是四大原则):封装、继承、多态。java中还包括抽象。在此不做过多讨论。今天要讨论的虚方法、抽象方法、抽象类、接口所有的一切都是以多态作为基础的,所以让我们聚焦多态————多态是什么?多态(Polym...

2017-12-12 19:57:52 13497 8

原创 Linux下的僵死进程以及其处理办法

僵死进程概念:    1.父进程未结束,子进程结束。父进程未获取子进程的退出数据。    2.一个进程的主体释放,pcb没有释放。了解了僵死进程的概念之后我们就可以轻松的模拟出一个僵死进程:父进程死循环,子进程运行一段时间后结束(或立刻结束。运行一段时间便于观察)。#include #include #include int main (){ pid

2017-11-01 15:12:46 1604

原创 Linux中fork()函数案例分析

在linux中,fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。下面有如下代

2017-10-21 21:35:20 338

原创 随机数:真随机数和伪随机数

说到随机这个词,相信各位肯定都深有体会了。生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性。可以说,随机是个非常有魅力的东西。而游戏开发者通常也会利用随机让游戏更加的吸引人。例如你正在玩的手机游戏里面的抽卡系统就是很好的例子。笔者曾经在阴阳师的抽符大坑中痛苦不堪。什么,你只玩王者荣耀?那里面的抽英雄抽符文,我想你应该也经历过绝望吧。

2017-10-06 23:23:18 91810 13

原创 数据结构1:顺序表

在计算机中主要有两种基本的数据结构来存放线性表:顺序表以及链表。其中链表又可以分为单链表,双向链表,单循环链表,双向循环链表,静态链表等。这些都是后话,我们首先对顺序表进行分析。作为数据结构最入门的存储结构,它是很有意义的。 顺序表1.顺序表的结构     在编写顺序表所实现的相关函数之前,我们先要确定顺序表的结构。那么什么是顺序表呢?     定义: 顺序表是在计算机内存...

2017-10-05 18:12:12 681

原创 C语言中的逻辑运算符:按位与,按位或,按位异或,取反,左右移位

c语言中存在6个位操作运算符,且它们只能用于整形操作数。   &         按位与   |          按位或   ^         按位异或      >>      按位右移   ~        按位取反1.按位与(AND)按位与的定义是:同一二进制位上的数字都是1的话,&的结果为1,否则为0.根据这个特性,&操作常常用来

2017-09-28 11:17:49 20479 2

原创 单链表

链表作为非常常见的一种数据结构,广泛应用于各个场合中。相比于顺序表,它不需要一段连续的内存,而是通过next指向自己的下一个节点。链表的定义如下:typedef struct Node{    int data;    struct Node* next;}Node,*List;结构是一个数据域,一个next指针。一般来说链表带有头节点会方便

2017-09-24 12:38:11 189

原创 Linux:系统启动级别选择以及切换

linux经过长时间的发展,已经从单纯枯燥的dos黑白界面变成了拥有多彩桌面的操作系统,以至于它看起来没有以前那么单调。然而有时候因为一些特殊需要,而需要变更启动级别的时候,如何进行切换呢?  当然,这个功能的实现和系统文件是密切相关的,自然需要superUser权限。通过su命令输入root账号的密码,进入su模式。  之后使用vim命令,进入文件:vim /etc/inittab 

2017-08-21 23:05:42 1724

原创 经典算法:堆排序

堆排序

2017-08-21 08:37:31 280

空空如也

空空如也

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

TA关注的人

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