自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 Linux MD5加密的简单使用

文章目录一. 什么是MD5二. Linux下的简单实现三. 测试一下最近看到PPP拨号在验证时,有两种验证方式,一种是口令验证协商(PAP),另一种是挑战-握手验证协议(CHAP),因为最近在做的一个项目,其中也用到了客户端登录验证连接服务器的这样一个方式,所以也想对客户端发送的用户名与密码信息进行加密后传输,避免明文的直接传递。后来了解到了MD5加密,虽然不是很懂其内部算法原理,但是用起来还是很好用的.一. 什么是MD5MD5消息摘要算法(英语:MD5 Message-Digest Algorit

2020-08-14 10:50:36 3322

原创 Linux串口编程 —— 4G模块短信获取与删除

文章目录一. 回显短信的两种方式1.1 PDU编码显示1.2 Unicode显示二. 相关指令的学习2.1 AT+CMGF 设置短信回显模式2.2 AT+CMGL 查看短信2.2.1 AT+CMGF=0 模式2.2.2 AT+CMGF=1 模式2.3 AT+CMGD 删除短信三. 编程实现短信的获取与解析3.1 字符流转字节流3.2 利用iconv系列函数完成转码3.3 上层调用,获取指定号码的首条短信3.4 删除指定号码的首条短信四. 测试前面在座的项目一直在短信的发送上下功夫,尤其是在PDU编码上花了

2020-08-03 13:08:33 1976 1

原创 字符串分割函数 strtok() 的使用及函数实现

一. 函数的使用头文件 #include <string.h>函数原型 char *strtok(char *s, const char *delim);函数说明 strtok() 用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则是一个由分割字符组成的字符串,delim中的每一个字符都起到分割作用. 当strtok() 在参数s的字符串中发现到参数delim的分割字符时会将该字符替换为\0字符. 在第一次调用时,strtok() 必须给参数s赋值,往后调

2020-07-31 11:49:54 737

原创 字符流与字节流的相互转换原理及代码(Linux C)

文章目录一. 两者的区别二. 还需要了解三. 字节流转字符流实现三. 字符流转字节流实现四. 测试程序4.1 头文件 4.2 用于测试的程序 4.2 简单写一个makefile 4.3 运行  我们在做项目时,常常会遇到将字节流的数据转成字符流,或者将字符流的数据转为字节流,例如最近做的一个项目,其中一个模块是使用移远的EC20 4G模块通过串口编程实现中英文短信的发送与接收,其中:在中文短信的发送时,要进行PDU的编码,其中包括了utf-8转unicode的处理,获取到的是字节流的unicode编码

2020-07-31 00:17:38 2076

原创 Linux串口编程短信篇(四) ——— 实现最简单的4G模块短信发送

一. 像手机一样发送短信1.1 看看效果在介绍main程序之前,先来看一下效果吧~其中,cmgs,pdu 是PDU编码是的中间产物,也就是使用原始AT命令发送PDU短信时,需要自己计算填写到的数值,这个数值只有算的全部正确才能发送成功,打印出来是为了调试所用,也可以将其关闭显示.     可到PDU.c的文件中将1改成0可关闭pdu编码显示:继续测试:   1.2 提出问题前面说了,发送短信有两种格式,但是我在这里却没有显示输入要发送哪种格式的短信,这是怎么实现的呢?

2020-07-13 23:00:23 2696 3

原创 Linux串口编程短信篇(三) ——— AT指令封装实现Check系列函数及SMS函数封装

一. 很重要的函数: send_at_cmd() 标题并未提到这个send_at_cmd()函数,但可以这么说,该程序实现最终功能的最为核心的一个函数就是send_at_cmd(),也是一个非常好用的函数… 那么,他到底重要在什么地方呢?又为什么说它好用呢?1.1 设计思路 刚开始学习串口编程时,写了这么两个函数,分别是 comport_send() 和 comport_recv(),这两个函数分别封装了 write() 和 read() 系统调用,主要用来实现向串口发送AT指令和接收串口回发的数据

2020-07-13 20:52:29 3035 1

原创 Linux串口编程短信篇(二) ——— PDU编码(详解 UTF-8 转 Unicode)

文章目录一. 电话号码处理1.1 短信中心号码的处理1.2 收件人号码处理二. 短信内容处理2.1 UTF-8 转 Unicode2.2 Hex 转 String三. 最终汇总3.1 PDU格式拼接3.2 函数 pdu_encod()四. 模块头文件 PDU.h一. 电话号码处理1.1 短信中心号码的处理实现:int Processing_center_number(char *center_number){ int i; char temp; char head[20]

2020-07-13 17:28:50 2150 2

原创 Linux串口编程短信篇(一) ——— 串口通信初始化

文章目录一. 前言二. 短信篇介绍三. 串口初始化3.1 流程图 3.2 代码一. 前言 前面关于串口通信,串口编程的文章也总结了许多,之前的有一篇文章,写的是编程实现busybox microcom 工具,将功能模块一一分开,其实有一点多此一举了,但是作为我学习Linux下串口编程的记录,我还是决定不修改这篇博客,但是,既然作为串口编程的c文件,应该将所有用于串口通信的功能模块归纳进一个c文件 comport.c ,头文件均放置在 comport.h 中,然后写一个main函数来进行调用,这样,才是一

2020-07-13 15:52:03 1702 1

原创 Raspberrypi —— 实现 EC20 4G模块PPP拨号上网

文章目录一 . PPP协议1.1 什么是PPP1.2 PPP认证方式二. Linux中的PPP实现2.1 Linux中的PPP架构2.2 PPP协议族三. 拨号上网流程3.1 硬件准备3.2 软件准备3.3 拨号脚本四. 开始拨号五. 补充一 . PPP协议1.1 什么是PPPPPP协议(Point-to-Point Protocol)是一种网络协议中最为基础的协议,工作于数据链路层,它是为在同等单元之间传输数据包这样的简单链路而设计的,这种链路提供了全双工操作,并按照顺序传递数据包。PPP为基于各种

2020-07-11 17:23:41 4684

原创 4G模块AT指令发送中英文短信详细流程

文章目录Text 格式短信发送短信步骤1.检查SIM状态2. 发送短信AT+CMGF=1 (设置短信格式为Text)AT+CMGS="1559xxx8257"Ctrl+Z 发送PDU格式短信发送1. 检查SIM卡状态2. 处理短信中心号码处理收件人号码与中文短信内容验证Text 格式短信发送短信步骤收件人:+861559xxx8257信 息:Hello World!1.检查SIM状态AT+CPIN? (查看SIM卡是否就绪)AT+CREG? (查看SIM卡注册状态)AT+COPS (查看

2020-07-07 22:18:00 6586 4

原创 AT指令集 —— EC20 4G模块短信的收发与管理(短信服务命令)

文章目录短信服务命令AT+CSMS 选择消息服务(在CDMA网络中无效)AT+CMGF 讯息格式AT+CSCA 服务中心地址(在CDMA网络中无效)AT+CPMS 首选消息存储AT+CMGL 列出短信AT+CMGD Delete MessageAT+CMGR 读短信AT+CMGS 发送短信AT+CMMS发送更多消息(在CDMA网络中无效)AT+CMGW 写消息到内存AT+CMSS 从存储发送消息短信服务命令AT+CSMS 选择消息服务(在CDMA网络中无效)该命令选择消息传递服务<serv

2020-07-07 18:41:40 11486

原创 Linux树莓派串口通信编程 —— C语言实现AT指令集的发送与接收

一. 前言 在拿到我的EC20 4G模块后,可谓是迫不及待的去办了一张新的电话卡,可是在插上卡以后,登录我的树莓派,却始终存在一个问题,插上卡以后,使用AT命令AT+CSQ查看信号强度,一切正常,AT+CPIN?一切也都就绪,但是在使用AT+CREG?时,却出现了(0,2)的错误,我上一篇博客有提到,使用这个命令第二个参数出现2说明卡还没有注册上,但是处于正在注册状态,可是无论我怎么等,仍然处于这个状态,换了几张卡依然如此,能检查出卡,却大不了电话发不了短信,在网上找了各种解决方法,cs

2020-07-05 13:48:17 7186 9

原创 AT指令集超详细解析(内含EC20模块datasheet)

AT指令语法  使用AT指令与串口通信,是一种“礼尚往来”的通信方式,即当控制端输入一个AT指令后,与之通信的外部设备将会回复一个结果,就这样一对一的进行。以最简单的AT指令为例,当串口连接好以后,使用busybox microcom -s 115200 ttyUSB2当然,4G模块接入树莓派后会模拟出多个模块,如果选择的ttyUSB不对可多尝试记下;进入串口通信模式,当我输入一个AT后,设备将会回复一个OK每输入一次AT设备都会回复一个OK,就可以利用不同的指令,结合设备的返回码来与设备通信

2020-06-30 14:48:25 25000 1

原创 串口通信知识总结

  之前断断续续的学习了解了串口通信的相关知识,但由于没有集中地学习,导致对串口通信的知识理解相当凌乱且零碎,今天就从头总结一下串口通信的相关知识吧~文章目录一. 通信方式1.1 并行通信1.2 串行通信二. 串行通信分类2.1 按照数据的传输方向2.1.1 单工2.1.2 半双工2.1.3 全双工2.2 按照通信方式2.2.1 同步通信2.2.2 异步通信三. 串口通信的数据格式3.1 一帧完整数据3.2 奇校验与偶校验3.3 起始位与停止位3.4 波特率四. 串口通信协议4.1 RS-2324.2 T

2020-06-29 15:07:03 2545

原创 数据结构与算法 —— 树(相关知识回顾)

文章目录一. 概述二. 树的实现2.1 双亲表示法2.2 双亲孩子表示法一. 概述树的存储结构应用范围极为广泛,我所了解的,如Linux操作系统的目录结构,DNS域名的存储,多路复用中的epoll利用的红黑树…那么,什么是树嘞?这就是一颗树,下面引出一些概念空树上面的每一个圆圈表示一个结点,用n来表示结点个数,当n等于0是则代表树是空树根节点当n>0时,树有且仅有一个根节点,如图一所示的A结点结点关系A是B的双亲结点,B是A的孩子结点,B,C是兄弟,E,F是

2020-06-29 00:29:05 412

原创 基于树莓派的sht20温湿度传感器应用(c语言)

文章目录一.I2C协议1.1 I2C总线特征1.2 I2C总线特征1.3 I2C总线协议1.4 常见的几种传输二. sht2x温湿度传感器模块三. 基于树莓派的温湿度传感器的应用3.1 使能i2c驱动3.2 接线3.3 C代码3.4 运行实现一.I2C协议协议详解1.1 I2C总线特征I2C主要靠2根线来控制,一根是SDA(串行数据线),一根是SCL(串行时钟线),通过对SCL和SDA线电平高低的控制,来产生I2C总线协议所需要的信号进行数据传递。空闲时,两根线一般被接上上拉电阻拉高,保持高电平。

2020-06-26 16:57:27 3289 1

原创 树莓派 —— 连接电脑的两种实用方法

文章目录1.Wifi连接2.使用串口其实通过电脑连接树莓派控制终端并不难,但是对于新手来说,在不了解的情况下可以说是一头雾水,在我原来刚拿到树莓派时,在网上找了很多博客,想要知道树莓派连接电脑的方法,可是找来找去都没找到一个准确可用的(可能有但由于缺少配件),而且,有大部分文章就是互抄转载,从csdn抄到简书,再从简书抄到csdn,很多都没有使用价值,下面就介绍两种比较实用的方法,要用到SecureCRT,这是一个非常实用的软件,除了可以进行ssh登录,也可以进行串口连接,还可以连接linux的虚拟机,所

2020-06-25 11:49:55 9304 3

原创 TCP滑动窗口协议与nagle算法

一. 缓冲区TCP协议是一个全双工的协议,当A与B建立好连接后,可以互相发送数据,当A作为发送方时,存在一个发送缓冲区,也就是说发送的数据会先放置在发送缓冲区处,而作为接收方的B会有一个接收缓冲区,接收到的信息会先存储在接收缓冲处。发送窗口,则是发送缓冲区的一部分。二. 滑动窗口发送数据时通常是按字节发送,下面来看一张图:我们知道,TCP是一个可靠的协议,当A发送完一部分数据后,需要接收方回B发一个确认数据包(ACK),这样,A才能继续发送接下来的数据,这也就是图中显示的情况,位于缓冲区中的窗口

2020-06-23 14:36:44 507

原创 算法笔记 —— 八皇后问题

一. 问题描述在国际象棋中,皇后棋子拥有最大的攻击力ju,她除了可以像象棋中的‘车’一样攻击行和列,还可以攻击四个斜方向的棋子,如图:红线为其攻击范围,那么什么是八皇后问题呢?即在当前棋盘上,要摆放八个皇后棋子,且这八个皇后棋子,不能在彼此的攻击范围内,例如下面这种情况:二. 思路分析在第一行放置一颗棋子,来到第二行,放置棋子时,需要判断这个位置是否危险,即该位置的列方向,斜方向是否有其他棋子存在(因为行方向只能放一颗棋子),如果安全,则放下棋子,递归调用函数,直到第八颗棋子放置完毕后,打印棋

2020-06-23 11:43:25 348

原创 算法笔记 —— 汉诺塔详解

文章目录一.问题来源二.小游戏体验三.思路分析四. 程序实现一.问题来源相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号X、Y、Z),在X杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把X杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于X、Y、Z任一杆上。二.小游戏体验以三个为例,移动方法如下(小游戏网址:汉诺塔小游戏)三.思路分

2020-06-21 13:26:34 846

原创 算法笔记——字符串循环左移(字符串的反转)

在剑指offer中有这样一道题,将字符串 ABCdefGHI 循环左移3位,也就是以defGHIABC输出思路:首先,以pos将字符串分为两组,分别反转这两组字符串,在将整个字符串反转即可得到结果:反转字符串:void Swap(string &str,int begin,int end){ while(begin<end) { swap(str[begin++],str[end--]); }}功能函数:string Reserve(string str ,i

2020-06-21 11:03:26 446

原创 数据结构与算法 —— 循环队列(含makefile)

一. 循环队列的引入上一篇博客总结队列的链式存储,队列还有一种存储方式那就是顺序存储,大致是这样:

2020-06-20 17:20:07 277

原创 数据结构与算法 —— 队列的链式存储结构

文章目录一.概述二.结点定义二. 初始化队列三. 入列四. 出列五. 销毁队列六. 运行程序一.概述队列是一种只允许咋一端进行操作(插入,删除)的线性表,与栈相比,栈是一种先进后出(Fast In Last Out)的形式,队列则是先进先出(Fast In Fast Out),就像我们日常生活中的排队一样(大家都很有素质)。二.结点定义使用链式存储结构的方式,结点的定义:typedef struct QNode { ElemType data; struct QNode *nex

2020-06-20 10:52:44 432

原创 C++学习笔记——继承与多态

继承与多态都是C++中很重要的两个概念,也是相比起C语言的优势所在,下面就来总结一下C++中继承与多态的概念以及简单用法!一.继承1.1 什么是继承?面向对象思想是一种跟家符合人类思维的思想,一开始我还不怎么理解这句话,但是随着对C++以及面向对象思想的学习,我越发感觉到这句话的意义所在。因为C++中的一大特点,封装的存在,将一类对象的共同特点,共有的成员和方法封装成类,但是,不可能每一类对象都要从头进行封装,就像游戏给一个英雄添加了一项新技能技能,总不能重头在创建一个新的英雄类吧,而且,在升级系统

2020-06-18 16:16:17 715 2

原创 数据结构与算法 — 栈的链式存储结构

对于栈来说,使用顺序存储结构偏多,而对于队列,则是使用链式结构偏多,栈的概念在前一篇已经介绍了,这篇主要给一下链式的代码:基本定义:typedef int ElemType; //这里用int示例 typedef struct StackNode //节点的定义 { ElemType data; struct StackNode *next;}StackNode,*LinkStackPtr; typedef struct LinkStack //栈结构的定义 { LinkStack

2020-06-04 15:56:17 213

原创 C++学习笔记 — 搞懂函数重载

一、概述函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。二、如何使用函数重载如上所说,重载函数的函数名是相同的,所以为了举例,我先定义了三个结构体,这三个结构体分别代表了三棱锥,长方体和球:/* 三棱锥 */struct Triangular_Pyramid{ float S; /* 底面积 */ float

2020-06-03 10:50:44 387 1

原创 数据结构与算法 —— 栈的顺序存储结构及C实现

一、什么是栈栈是一种先进后出的数据结构,英文last in first out(LIFO),又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈可以有两种方式实现,一种是顺序存储,一种是链式存储,下面就来说一下两种方式的实现。二、栈的顺序存储结构关

2020-06-02 22:51:16 479

原创 数据结构与算法 — 双链表

文章目录1、双链表的结构2、创建一个新结点3 、插入结点4、删除结点5、创建双链表6、销毁双链表7、获取头结点结点和尾结点8、链表长度9、获取指定位置的结点10、设置指定位置的元素11、遍历双链表12、已知数值找位置13、在指定位置插入元素14、尾部添加元素15、删除指定位置的结点1、双链表的结构从图结构可以看出,双链表具有一个指向前驱结点的指针和一个指向后继结点的指针,所以,双链表中,结点是这样定义的:typedef int Elem;typedef struct DualNode {

2020-06-02 13:14:29 285

原创 Linux基础知识最后一篇

注意,这知识基础的是的最后一篇,不是linux知识的最后一篇,linux体系知识可以说是浩瀚无垠,而我这几篇文章可以说只是冰山一角,linux可以做的事情数不胜数…今天就来介绍linux 基础知识和命令 的最后一篇啦…一、文件的压缩与解压Windows...

2020-06-01 12:33:07 213

原创 Linux基础知识篇四

我不是英雄,我只做我想做的事,保护我想要保护的人而已。——路飞今天主要介绍功能强大的grep命令以及磁盘管理与网络相关命令。文章目录一、文档编辑命令1.1 grep 命令1.2 wc 命令二、磁盘管理命令2.1 cd 命令2.2 df 命令2.3 du 命令2.4 ls 命令2.5 mkdir 命令2.6 pwd 命令2.7 rmdir 命令三、网络相关命令3.1 ping 命令3.2 telnet 命令3.3 ifconfig 命令3.4 netstat 命令3.5 iptable 命令 一.

2020-05-29 22:21:47 243 1

原创 Linux基础知识篇三 -- vim的基本使用

文章目录一、什么是vim?二、vim的优缺点2.1 可怕的 vim (缺点)2.2 vim的优点三、vim的基本使用3.1 各模式的转换图3.2 vim的三种工作模式3.2.1 命令模式3.2.2 底行命令模式3.2.3 输入模式一、什么是vim?Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。连

2020-05-29 11:37:52 382

原创 Linux基础知识篇二

文章目录 一、Linux的文件系统1.1 Linux的五种文件类型1.2 Linux的目录结构1.3 inode结点(索引结点)1.4 硬链接和软连接1.5 RAID 二、Linux的文件管理命令1. cat 命令2. chmod 命令3. chown 命令4. cp 命令5. find 命令6. head 命令7. less 命令8. more 命令9. ln 命令10. locate 命令11. mv 命令12. rm 命令13. tail 命令14. touch 命令15. whereis 命令16.

2020-05-28 22:33:27 866

原创 Linux基础知识篇一

学习了这么久的Linux,对于某些知识已经忘得差不多了,且大脑里没有一个系统性的知识体系,最近关注的一个名叫 良许Linux 的公众号总结了一篇关于Linux知识的文章,针对在上面的学习,也结合自己对Linux的了解,准备写几篇博客来巩固一下自己对Linux操作系统的了解什么是LinuxLinux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。L

2020-05-27 16:43:41 376

原创 Linux的五种网络IO模型

文章目录一、同步与异步,阻塞与非阻塞1.1 同步1.2 异步1.3 阻塞1.4 非阻塞二、同步阻塞与同步非阻塞2.1 同步阻塞2.2 同步非阻塞三、五种网络IO模型3.1 阻塞IO模型3.2非阻塞IO模型3.3 IO复用模型3.4 信号驱动IO3.5 异步IO在刚开始学习到五种IO模型时,只是学习各个模型的工作特点,却不能真正的理解,类似于死记硬背,而现在伴随着知识的积累,也慢慢的将以前不懂的知识慢慢梳理,理解;今天就来聊聊,Linux下的五种IO模型。一、同步与异步,阻塞与非阻塞1.1 同步同步

2020-05-26 20:05:08 374

原创 系统调用与库函数

操作系统对于文件的操作,有两种方式,分别是 :系统调用(system call)和库函数调用(Library functions)从这个图不难看出,其实库函数的原理还是使用了系统调用;系统调用系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息,程序中调用了printf() 函数,而库函数 printf 是将需要打印的信息输出到屏幕这个硬件设备上。我们知道,对于所有

2020-05-26 17:07:10 380

原创 选择排序原理 及 代码演示

原理选择排序的算法相对简单,其基本原理与步骤是:1. 首先,假设数组的第一个元素是最小值,将其值与下标记录;2. 从第二个元素开始与最小值比较,若该元素小于最小值,则更新最小值与最小值下标;反之则继续下一个比较(等于最小值的可以看做大于它进行处理);3.一轮比较结束后,我们可以得到最小值与其对应的下标,然后交换首元素与最小值的数值,就完成第一轮; 4. 因为已经找到了最小值且位于首部,所...

2020-04-25 23:45:28 957

原创 快速排序原理 及 代码展示

文章目录一. 快速排序简介概述基本思想实现步骤二. 快速排序图解三. 算法代码四. 时间复杂度与稳定性一. 快速排序简介概述快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个...

2020-04-25 13:12:19 238

原创 冒泡排序原理 及 c++实现

冒泡排序原理用文字来表达,冒泡排序正如其名字一样,每一次会有一个数据冒泡出来,这个数据可以是队列中的最大值,也可以是最小值;如果是最大值,则:通过从第一,二个数据开始比较,若第一个数大于第二个,则交换他们的位置,反之则不交换,接着,第二位与的三位比较,将较大的数放在第三位,重复如此,当第一次遍历完后,队列的最末尾的数就是队列中的最大值了(最大值冒了个泡),下一次遍历,就可以不用遍历这个最大值,重...

2020-04-24 22:36:21 343

原创 循环链表 之 魔术师发牌问题

问题描述魔术师现在有13张黑桃扑克,现在要完成下面这个魔术:将扑克整理好后,翻开第一张为黑桃1(黑桃A)并放在桌上(牌堆剩余12张),然后将剩余牌的第一张放置在牌堆最底部,翻开第二张是黑桃2并放在桌上(牌堆剩余11张),再将剩余扑克的第一张,第二张一次放到牌堆底,第三张亮出是黑桃3并放在桌上,以此类推,是黑桃几就抽到第几张并亮出,直到所以扑克按照这种方式,依次由黑桃1(黑桃A)到黑桃13(黑桃...

2020-04-12 10:52:20 260

原创 Linux下动态库与静态库原理与制作

一. 什么是库在系统中,库就是一个现有的,已经写好可供直接使用的代码,很多程序都依赖库;通常,库大致分为两种:分别是动态库和静态库;二. c程序的链接过程先观察图:通过...

2020-04-08 16:11:05 713

空空如也

空空如也

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

TA关注的人

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