- 博客(77)
- 收藏
- 关注
原创 python:导入第三方库greenlet,gevent方法
greenlet,geventgreenlet,gevent是python支持的第三方库,它们可以帮助我们完成协程的使用,其中greenlet是手动调换方式(switch方法),gevent是自动调换方式(遇到IO操作)。在导入第三库greenlet,gevent的时候我遇到了一些问题,现在将问题和解决办法总结如下。导入问题greenlet,gevent两个库遇到的问题是一样的,以greenlet为例。解决办法步骤一:下载.whl文件首先,我们需要点击下面的链接,下载该库文件对应版本的.
2020-12-01 17:24:39 2426 1
原创 python学习笔记:迭代器
python迭代器可迭代对象要了解迭代器,我们首先就要知道迭代是什么意思,简单来说迭代就是遍历,eg:字符串、列表都是可以遍历的,我们就称为可迭代的对象。那么在python中如何判断一个对象是可迭代的,python为了提供了一种简单的方法,如下:from collections.abc import Iterable #导入包f=isinstance(需要判断的对象名,Iterable)用该方式可以快速的盘算一个对象是不是可迭代的对象,如果返回True证明是可以迭代的,返回False证明是
2020-11-22 15:16:45 428
原创 python学习笔记:生成器
生成器(generator)列表是python中经常使用的一种数据类型,但是受到内存的限制,其容量是有限的。当列表中的元素很多很多的时候,可能会出现内存不够,列表无法建立的情况,而且即使我们可以开辟成功,我们使用的元素也可能是其中很小的一部分元素,这样在很大程度上就浪费了内存。为了解决这个问题,python引入了“生成器”(generator)这个概念,其实质就是“一边循环,一边计算”的机制,即:,即当用户需要使用某个对象时,python才根据事先设计好的规则开辟内存空间创建该对象供用户使用,而不是像列
2020-11-22 13:18:39 469
原创 C语言学习笔记:动态数组
动态数组数组是C语言中的很重要的一种构造类型,最初我们学习的都是静态数组,但是,静态数组有着自己难以改变的缺点——数组长度固定。一般在静态数组定义后,系统就会为其分配对应长度的连续的专有内存空间,可是,我们都知道,不同的运行样例,所需要的数组长度是不一样的,为了所有样例都可以执行,一般我们会将数组长度设置为一个很大的值,比如:我一般都是借助宏定义直接声明1000,这个长度是可以满足我日常所需的。虽然这种方式,满足了一般运行的要求,但是它极大的浪费了内存。于是我们引出了动态数组的概念,顾名思义,“动态”
2020-11-16 23:20:29 51908 8
原创 python学习笔记:装饰器
python装饰器在python的学习中,我们经常会遇到装饰器这个词。从他的名字看,起的作用应该是“装饰”,那么它具体是什么呢?今天我们就来分析一下。基础知识如果我们要学习装饰器,那么一定要了解内部函数和闭包的概念,因为可以这么说装饰器基于闭包实现,闭包基于内部函数实现。也可以说装饰器是闭包的一个应用。1、内部函数内部函数大致格式#定义函数func()def func(): #函数func()变量声明(局部/全局) #函数func()中其他函数体,除内部函数以外 d
2020-11-15 18:02:11 156
原创 Python学习笔记:拆包和装包
拆包和装包在python的学习中,我们经常会遇到两个可变变量:(1)*args(2) ** kwargs变量的名字不重要,重要的是 * 和 ** 两个符号,*代表的就是该变量是可变数据类型。注意:可变数据类型和不可变数据类型可变数据类型:是指当该数据对应变量的值发生变化的时候,对应内存地址并没有开辟出新的内存去接收新值,而是在原来的内存空间上进行修改。eg:列表,集合,字典都是可变数据类型不可变数据类型:对象所指向的内存中的值是不可以改变,也就是如果给不可变数据类型做修改,则内存地
2020-11-15 15:25:47 642
原创 C语言学习笔记:C指针
指针C语言是我接触的第一门编程语言,当时学习C语言的时候,遇到的第一个难点就是指针。我觉得大多数人在学习C指针的时候都或多或少有过困惑,最近正好在复习C语言,对指针的理解由加深了,现在来总结一下。地址和指针变量的内容和地址在提到了指针的时候,我们不可避免的会涉及到地址和指针的关系。我们在学习计算机基础的时候就知道,计算机中的所有数据都是存储在内存中的存储单元的,存储单元说白了就是内存中的一个字节。注意:不同类型的数据所占用的字节数是不一样的举例:那么我们刚才提到的地址和存储单元有什么关系
2020-11-15 10:31:28 234
原创 python学习笔记:文件操作
python文本文件操作文件操作是编程中常见的操作,这次,主要总结一下python中的文本文件操作。一般来讲,文件的操作流程如下:(1)打开文件(2)对文件的内容进行读取,写入,删除,修改等(3)关闭文件打开和关闭文件打开文件和关闭文件是文件操作的第一步和最后一步。1、打开文件打开文件的时候我们需要使用函数open(),其调用的一般形式如下:文件对象=open(文件名,使用文件的方式)注意:常用的文件使用方式如下:2、关闭文件在对文件的修改完毕后,最后我们要释放文件资源,也就
2020-11-10 20:53:51 492
原创 python学习笔记:类的继承
python中类的继承在之前讨论面向过程和面向对象的区别时,我们提到了一个等式:面向对象 = 对象 + 类 + 继承 + 消息从中我们可以看到继承是面向对象的语言中一个重要的组成部分,继承是一种连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生或子类,而原始类称为新类的基类或父类。派生类可以从基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。那么pyt
2020-11-10 14:20:54 616 1
原创 python学习笔记:类的方法总结
python中类的方法总结在python中,类的方法有如下三种:(1)实例方法(即:对象方法)(2)类方法(3)静态方法下面,将对这三种方法进行总结。1、实例方法(对象方法)通常情况下,类中的方法默认是实例方法,在定义的时候不需要使用使用特殊的关键字进行标识。基本知识对于实例方法,我们需要了解以下的基本知识:(1)实例方法至少有一个参数,默认该参数的名字为“self”(也可以是其他的),若有其他参数,可以跟在该参数后面(2)实例方法有两种调用方式:第一种:通过实例对象调用,该方法不需
2020-11-09 22:53:34 17725 1
原创 python学习笔记:去掉python字符串中空格的方法总结
去掉python字符串中空格的方法总结在python的字符串处理过程中,有一个很常见的操作的是去掉字符串中的空格,python提供了以下四个函数来实现该操作:(1) lstrip()函数(2) rstrip()函数(3) strip()函数(4) replace()函数但是它们有各自的功能,下面进行总结。lstrip()函数功能:只能去掉字符串前面的空格用法:s.lstrip()即:意味着它不能去掉字符串其他位置的空格:中间,后面rstrip()函数功能:只能去掉字符
2020-11-05 23:45:27 947
原创 C语言:归并排序
归并排序归并是将两个或多个存序记录序列合并成一个有序序列。一般来说,一次对几个有序记录进行归并,就称为几路归并排序。以二路归并排序为例,其基本方法如下:(1) 将 n 个记录看成是 n 个长度为 1 的有序子表。(2) 将两两相邻时有序序列进行归并。(3) 重复执行步骤 (2) 直到归并成一个长度为 n 的有序表如下所示:C语言代码//二路归并#include <stdio.h>int MergeSort(int A[],int B[],int low,int high)
2020-07-20 18:06:31 938 1
原创 C语言:堆排序
堆排序基本概念:(1)n个关键字序列L[1~n]称为堆,当且仅当该序列满足:①L(i)<=L(2i)&&L(i)<=L(2i+1),则称该堆为小根堆②L(i)>=L(2i)&&L(i)>=L(2i+1),则称该堆为大根堆在排序过程中将序列视为一棵完全二叉树的顺序存储结构。(2)堆的初始化对所有具有双亲结点含义编号从大到小(n/2~1)做如下调整:①若孩子结点都小于双亲结点,则不做调整②若存在孩子结点大于双亲结点,则将最大的孩子结点
2020-07-20 16:01:32 804
原创 C语言:简单选择排序
简单选择排序简单选择排序是选择排序的一种,其基本思想是将每一趟在后面的n-i+1个待排序的序列中选取关键字最小的元素,作为有序子序列中的第i个元素,直到n-1趟完成,待排序序列中只有一个元素,即得到最终的排好序的序列。(一趟排序会将一个元素放在最终的位置上)C语言代码#include<stdio.h>void SelectSort(int A[],int n); int main() { int A[1024],n; printf("请输入要输入的元素个数:"); scan
2020-07-20 15:16:33 7385 1
原创 C语言 快速排序
快速排序快速排序通过分而治之的策略,交换两个不相邻的元素,一次可以消去多个逆序,效率极高。基本思想在待排序的序列L[1~n]中,任意取一个元素pivot作为“枢轴”,凡是关键字小于枢轴的记录,均移动到该记录之前,关键字大于枢轴的记录,均移动到该记录之后,即对无序的记录进行“以此划分”,之后分别对分割所得的两个子序列“递归”调用进行快排。通过一趟排序将待排序序列划分为具有如下特点的两部分:一次划分会将一个元素pivot防止在它最终的位置上。算法实现的思路初始化标记low为划分部分第一个元
2020-07-20 14:26:23 598
原创 C语言:冒泡排序
冒泡排序冒泡排序是交换排序的一种,其基本思想是:假设待排序的序列长度为n,从后往前(从前往后)两两比较相邻元素的值,若为逆序(当i<j时,A[j]>A[i],称逆序),则交换他们直到序列比较结束。一次冒泡会将一个元素放在它最终的位置上,以后比较时不用比较该元素。C语言代码//使用冒泡排序进行升序排列#include <stdio.h>void BubbleSort(int A[], int n);int main() { int A[1024],n; prin
2020-07-20 13:56:34 315 1
原创 C语言:希尔排序
希尔排序希尔排序是插入排序的一种,也称作缩小增量排序,其基本思想是:先将待排序的序列分割成d个形如L[i,i+d,i+2d,…,i+kd]的特殊子表,分别进行直接插入排序,当整个表中的元素呈"基本有序时",再对全体记录进行一次直接插入排序。最终得到排好序的序列。d的选取:手动演示希尔排序的过程:取待排序序列为: 46 55 13 42 94 17 5 70实验代码//使用希尔排序进行升序排列#include <stdio.h>int ShellInsert(in
2020-07-20 13:25:15 1134
原创 C语言: 折半插入排序
折半插入排序折半插入排序是插入排序的一种情况,其效率比直接插入排序,其实现过程和折半查找类似。C语言代码//使用折半插入排序进行升序排列#include<stdio.h>void BinsertSort(int A[],int n);int main() { int A[1024],n; printf("请输入要输入的元素个数:"); scanf("%d",&n); printf("\n请输入要排序的序列:\n"); for (int i=1; i<=
2020-07-20 12:47:08 967
原创 C语言:直接插入排序
直接插入排序直接插入排序是插入排序的一种,插入排序是每次将一个待排序的序列插入到一个前面已经排好序的子序列当中。直接插入排序的算法思想如下:(1)查找出L[i]在L[1~i-1]中的插入位置k;(2)将L[k~i-1]中所有的元素全部向后移一个位置;(3)将L[i]复制到L[k]中。手动显示一下这个过程:假设有一个待排序序列 : 3 6 7 2 5 1 4趟数哨兵序列163 6 7 2 5 1 4273 6 7 2 5 1 432
2020-07-20 12:11:07 11292 6
原创 栈的应用:中缀表达式转后缀表达式
中缀表达式转后缀表达式在学习数据结构的时候,我们知道,栈有很多的应用,其中比较常见的一个就是中缀表达式转后缀表达式问题。中缀表达式转后缀表达式的算法思想:(1)数字:直接加入后缀表达式(2)运算符:A.若为’(’ ,入栈 ;B.若为’)’,则依次把栈中的运算符加入后缀表达式,直到出现 ‘(’,并从栈中删除’(’;C.若为’+’,’-’,’*’,’/’ ,则分为以下情况讨论:a.栈空:入栈;b.栈顶元素为’(’:入栈;c.高于栈顶元素优先级:入栈;d.若不属于以上情况,则依次弹出栈顶运算
2020-07-14 19:17:54 953 2
原创 栈的应用:括号匹配
括号匹配在学习数据结构的时候,我们知道,栈有很多的应用,其中比较常见的一个就是括号匹配问题。在使用栈解决括号匹配问题时,其算法思想是:(1)初试一个空栈,顺序读入括号;(2)若是右括号,则与栈顶元素进行匹配,分以下两种情况:①匹配:弹出栈顶元素并进行下一个元素②不匹配:该输入序列不合法(3)若是左括号,则压入栈中;(4)若是全部元素遍历完毕,栈中非空则序列不合法。注意:以上标识重点的部分,指出了括号匹配时不合法的两种情况。注意:以下代码只能检测 ( ) 和 [ ] 括号代码如
2020-07-14 18:52:26 1025 1
原创 单链表的合并(交叉合并,升序合并)
单链表的合并单链表的合并情况有如下几种:(1)Length(L1)=Length(L2)(2)Length(L1)>Length(L2)(3)Length(L1)<Length(L2)单链表的交叉合并(交叉合并的重点在交叉,不保证合并后的数据是有序的)代码如下:#include<stdio.h>#include<malloc.h>typedef struct LNode { int data; struct LNode *next; //指针
2020-07-13 20:24:53 2528 1
原创 顺序表和链表的比较
顺序表VS链表顺序表和链表是线性表的两个分类,其中,逻辑顺序和物理顺序相同为顺序表,不同为链表。下面从以下方面对比一下两者的异同点。顺序表单链表存取方式顺序存取和随机存取顺序存取,通过相邻表示逻辑关系逻辑结构和物理结构逻辑和物理都相邻逻辑相邻,物理不一定相邻,通过指针表示逻辑关系基本操作(1)插入、删除:顺序表需要移动大量的元素,其时间复杂度为O(n) 。(2)查找:按值查找顺序表(无序)的时间复杂度为O(n);按序号查找时顺序表的时间复杂度为O(1)(1)
2020-07-13 17:10:27 506
原创 头插法、尾插法建立链表
单链表的建立链表是线性表的一种,一般来说链表就是一系列的存储数据元素的单元通过指针串接起来形成的,常见的链表是单链表和双链表,一个域用于数据元素的存储,另一个或两个域是指向其他单元的指针。对于单链表来说,指针域是一个,指向当前节点的后继节点;双链表来说,一个指针域指向当前节点的后继节点,另外一个指针域指向当前节点的前驱节点。本文只讨论单链表的情况。单链表的建立分为头插法和尾插法两种。如下:实现代码如下://头插法和尾插法建立链表,整型为例#include <stdio.h>#in
2020-07-13 13:14:38 1687
原创 计网笔记:CRC循环冗余码
CRC循环冗余码CRC循环冗余码是在通信领域经常用来用作检错编码的方式。计算冗余码我们可以通过以下步骤计算出冗余码:(1)加0:在要发送的数据后加r个0,其中r为生成多项式G(x)的阶为(一般来说,多项式为N位,则阶为N-1);(2)模2除法:加0后的数据除以生成多项式G(x),则余数就是所求的冗余码/FCS/CRC检验码的比特序列(模2除法的本质就是异或运算)。最终我们要发送的数据就是:(0扩展)原数据(左移r位)+FCS。简单来说就是我们将计算出的余数补在原数据的后面,即可得到要发送的数据
2020-07-05 20:18:39 6142
原创 计网笔记:海明码(汉明码)
海明码(汉明码)海明码是可以发现双比特错误,并可以纠正单比特错误的编码方案。(一般来讲,检错编码不一定具有纠错能力,但是纠错编码具有检错能力)。其工作流程可以分为以下四个步骤:(1)确定校验码位数r;(2)确定校验码和数据的位置;(3)求出校验码的值;(4)检错并纠错。在以下的工作流程中,我们要发送的数据D=101101.工作流程1、确定校验码位数r我们使用海明不等式来确定校验码的位数r,海明不等式的形式如下:2^r>=k+r+1其中:k为数据的位数(信息位数);可以满足不
2020-07-05 15:55:57 5186 2
原创 计网笔记:奈氏准则 香农定理
奈氏准则 香农定理在计网中,准确来说,在通信领域,奈氏准则和香农定理占据重要的定位。奈氏准则奈氏准则,又名奈奎斯特定理。该准则是指在理想低通,即无噪声,带宽受限的条件下,为了避免码间串扰,极限码元传输速率为2W 波特(Baud),W是信道带宽,单位是hz。通过奈氏准则,我们可以有以下推论:(1)在任何信道中,码元传输速率有上限,超过上限,就产生码间串扰。(2)信道的频带越宽(通过的信号高频分量越多),可以用更高的速率进行码元的有效传输。(3)奈氏准则只是给出了极限码元传输速率,但并没有对信息传
2020-07-04 22:18:11 4831
原创 编译原理:LL(1)文法-构造预测分析表
LL(1)文法-构造预测分析表复习笔记LL(1)文法分析是语法分析中比较重要的一个方法,其中比较重要的环节是构造预测分析表。当然,在构造预测分析表之前,需要掌握两个集合的求法:FIRST集合和FOLLOW集合。注意:下文的测试用例中使用的文法如下:E→TE’E’→+TE’|εT→FT’T’→*FT’|εF→(E)|iFIRST集合的求法方法步骤如下:1、X∈VT (终结符号集合)FIRST(X)={X}(即:终结符号的FIRST集仍然是其本身)。2、X∈VN(非终结符号集合)
2020-05-27 08:38:06 42015 1
原创 计网实验:交换机基本配置
计网实验:交换机基本配置实验目的及实验内容(1)掌握网络仿真工具的使用;(2)掌握交换机MAC地址表管理;(3)掌握生成树分析;实验环境(1)Cisco Packet Tracer软件;(2)装有Windows系统计算机一台。实验步骤及结果1、在cisco packet tracer软件中添加PC和交换机,并用console连接。(具体做法是在左下方找到对应图标,进行拖拽,这里我添加了两台pc,一台交换机)2、配置交换机:交换机命名,加密使能密码,超时时间,禁止解析服务,ip地址,子网
2020-05-25 10:53:42 4273
原创 笔记:格林公式 高斯公式 斯托克斯公式
三大重要公式在高数的曲线曲面积分部分,格林公式、高斯公式和斯托克斯公式是三个十分十分重要的公式,利用这三个公式可以将复杂的积分转化为我们比较熟悉的积分进行解决。看似是三个公式,实则互相关联。现在将这三个公式总结如下,并简单的介绍三者之间的关系,为此,提前引入散度、旋度和通量的概念。不过数学符号有些不好输入,便以手写的方式进行说明。...
2020-05-09 00:42:49 12241 2
原创 计算机网络笔记:数据链路层
数据链路层链路层概述1、链路层协议:通过单段链路,点到点传送上层数据报链路两端结点间交互的帧格式,发送和接收帧时的操作2、两种网络链路类型:点对点链路和广播链路3、链路层环境重要特点(1)一条路径上的不同链路可运行不同的链路层协议(2)链路层协议提供的服务可能不同(3)通信环境较为简单4、链路层功能在哪里?网络适配器和驱动程序5、面向比特的协议:(1)把帧看成比特的集合(...
2020-03-24 22:35:51 395
原创 编译原理笔记:词法分析
词法分析词法分析器的要求1、词法分析的主要工作: 从源程序的第一个字符开始,从左到右扫描源程序,一次读一个字符,根据词法规则将有关字符组合成单词,并识别各类单词,当确定单词类别后,将单词输出。2、程序语言的单词符号可以分为以下5种:(1)关键字(2)标识符(3)常数(4)运算符(5)界符(eg:, ; ( ) 等)词法分析器的设计1、源程序的输入方式(1)一次性输入...
2020-03-10 22:28:39 1479
原创 计算机网络笔记:数据通信基础
数据通信基础数据通信基础知识1、通信系统的作用是将信息从信源发送到一或多个信宿,其一般模型如下:信源:将各种信息转化成原始电信号;发送设备:生成适合在信道中传输的信号信道:将信号传送到信宿的物理传输媒体接收设备:从受到减损的接收信号中正确恢复出原始电信号信宿:传送信息的目的地,将电信号还原注意:可以用交换技术降低网络成本,如下图,终端i复合了发送方(信源)和接收方(信宿)的功能...
2020-03-05 13:25:06 1539
原创 编译原理笔记:高级语言及其语法描述
高级语言及其语法描述程序语言的定义1、常用的高级程序设计语言语言特点FORTRAN数值计算COBOL事务处理PASCAL结构化程序设计LISP函数式程序设计PROLOG逻辑程序设计C系统程序设计Smalltalk面向对象程序设计JavaInternet应用,可移植性Python解释型2、程序语言由语法...
2020-02-26 21:51:43 1951
原创 Verilog探究:有限同步状态机的设计
有限状态机的设计1、有限状态机的基本概念有限状态机是时序电路的通用模型,任何时序电路都可以表示为有限状态机。在由时序电路表示的有限状态机中,各个状态之间的转移总是在时钟的触发下进行的,状态信息存储在寄存器中。因为状态的个数是有限的,所以称为有限状态机。有限状态机是由两部分组成:存储电路和组合逻辑电路。存储电路用来生成状态机的状态,组合逻辑电路用来提供输出以及状态机跳转的条件。其电路结构如图...
2019-11-30 21:17:51 1325
原创 面向过程和面向对象的区别
面向过程和面向对象的区别一开始,在我们学习编程语言时,就会接触面向对象和面向过程的概念,比如:C语言是面向过程的语言,而C++是面向对象的语言,而且一般高校,都是先学习面向过程语言C,再学习面向对象C++,甚至一些非计算机类学习只学习面向过程的语言C,并且作为其必修课。但是,我们很少会统一系统的考虑两者的区别。现在,基于我们之间的一个讨论课,总结一下两者的区别,当时也是参考了网上的很多资料,而...
2019-10-26 00:14:34 1396
转载 C语言探究:C语言缓冲区
C语言缓冲区C语言中缓冲区是一个很重要的知识点,当初了查了点资料,觉得下面这篇文章写的不错,为了省事,就选择了直接转载。不过主要是学习知识点和运用在实际编程中,所以是不是自己写的都还好啦。 ...
2019-10-25 22:18:57 4632
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人