【1.1】数据结构与算法
前言算法是什么?我们如何来评估算法的好坏?有没有一种优美的数学方式来评估算法好坏,而不受客观环境的影响。例如计算机的性能影响?
学习此部分,需要掌握一定的C语言基础
本部分内容参考程杰老师《大话数据结构》,青岛大学王卓老师的授课等 综合个人所学的总结笔记
本篇写于 时间 ,部分内容可能与现在不符,请自行判断
——这一招是我从我最爱的游戏里学来的♬
算法的定义算法是解决特定问题求解步骤的描述,在计算机中表示为指令的有限序列并且每条指令表示一个或者多个操作算法通俗理解就是对于问题的特定解决步骤。
算法的特性
输入输出算法具有零个或者多个输入,至少有一个输出。
有穷性算法在有限的步骤之后,能够自动结束而非无限循环。
确定性算法的每一个步骤都具有确定的含义,不会存在二义性。
可行性算法的每一个步骤都必须是可行的,也就是说每一步,都能执行有限次数完成。
算法设计要求
正确性算法的正确性是指算法至少应该具有输入,输出和加工处理无歧义性,能正确的反映问题的需求,能够得到问题的正确答案。
可读性算法设计的另一目的是为了便于阅读,理解和交流
健壮性当输入的数据不合法时,算法也可以对其做出相应处 ...
【2.1】线性表的逻辑结构
前言有了前面的基础,现在开始正式学习数据结构最常用也是最简单的一种结构——线性表。
学习本文需要掌握一定的 C语言基础。
本部分内容参考程杰老师《大话数据结构》,青岛大学王卓老师的授课,王道考研公开课等 综合个人所学的总结笔记。
线性表的定义线性表,顾名思义,是具有像线一样串联起来的表。串联则意味着存在一个头部,一个尾部,且中间的每个元素都是一个挨着一个,这样的表就可以称为线性表。
线性表(List):零个或多个数据元素的有限序列。
需要强调的是:
首先它是一个序列,也就是说,元素之间是有顺序的,如果元素存在多个,那么第一个元素无前驱,最后一个元素无后继,其他的元素都有且只有一个前驱和后继。
其次,线性表是有限的。事实上,计算机中处理的对象都是有限,无限的序列,只存于数学中的概念。
如果使用数学语言来进行定义的话,如下:
若将线性表记为($a_1,·····,a_{i-1},a_i,a_{i+1},···,a_n$),则表中 $a_{i-1}$ 领先于 $a_i$ ,$a_i$ 领先于 $a_{i+1}$,称 $a_{i-1}$ 是 $a_i$ 的直接前驱,$a_{i+1}$ 是 ...
【2.2】线性表的物理结构
前言在前面介绍了线性表是什么,现在来讲述线性表的两种物理结构的第一种——顺序存储结构。
学习本文需要掌握一定的 C语言基础。
本部分内容参考程杰老师《大话数据结构》,青岛大学王卓老师的授课,王道考研公开课等 综合个人所学的总结笔记。
线性表的顺序存储结构顺序表——用顺序存储的方式实现的线性表
顺序存储定义线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的顺序存储示意图如下:
可以通过sizeof(ElemType)函数来获取数据元素的大小
顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。
顺序表上的基本操作的实现静态分配静态分配,顾名思义,它的分配空间在一开始定义的时候就是固定的,代码示例:
123456#define MaxSize 10 //链表默认空间大小typedef struct{ ElemType data[MaxSize]; //静态空间大小 int length; //链表的长度}SqList; //链表结构体
ElemType需要看你具体使用的数据结构的类型
此处 ...
【1.0】C-引言
【1.0】引言前言这是C语言基础的笔记,也是我的复习笔记,本笔记没有长篇大论的理论,也没有过多的基础解释,对于稍微熟悉一点计算机语言的但是又迫切复习的小伙伴来说可能会有一些帮助。
前排提醒,本文需要一定的计算机基础和计算机语言基础
废话不多说,直接开始C语言之旅。
C语言入门程序结构直接展示计算机语言的入门编程,Hello world,代码示例:
123456#include <stdio.h>int main(){ printf("Hello World"); //输出Hello World getchar(); //暂停控制台 return 0; //返回 0}
整段代码结构很简单,先来剖析一下每一个部分是什么意思。
第一行代码 #include <stdio.h> ,是C语言的头函数,#后面是预处理函数宏,这句话的意思是引入stdio.h 这个系统文件,在头文件中包含了C语言开始的入口和基本的处理,所以需要编写C语言,开头一定需要引入头函数。
第二行 int main() ...
【2.0】C-数据类型及运算
【2.0】数据类型及运算前言c 语言经典的入门内容,笔记断断续续写了一个多礼拜,最近一直在考试,碰到考试周了就很头疼。
标识符和关键字C程序由C语言的基本字符组成,基本字符依据规则组成C语言的标识符和关键词,再按照语法要求构成程序。
标识符C语言中由用户命名的符号称为标识符,用来标明用户设定的变量名,数组名,函数名,结构体名等。标识符必须由有效字符构成,也就是标识符要合法。
C语言的命名规则如下:
标识符只能由字母,下划线,数字组成,且第一个字符必须是字母或者下划线,不能是数字。如:cla,cla1都是合法的,但是2cla,%123等都是不合法的。
字母区分大小写,例如:AB 和 ab是两个不同的标识符
当然有的计算机语言不区分大小写;例如:VB语言不区分大小写
不能使用C语言中的关键字
C语言虽然本身不限制标识符的长度,但是实际长度收到不同的编译系统和机器系统的限制。
为了提高标识符的可读性,一般来说,业内较为流行的有驼峰命名法,下划线命名法和匈牙利命名法
驼峰命名法
小驼峰命名法:除了第一个单词之外,其他单词首字母都大学。例如:myFileName,openFil ...
【2.0】访问寄存器和内存
前言这部分集中在寄存器和内存的角度来访问和使用,CPU 和内存以及寄存器的交互命令。
寄存器一个典型的 CPU 是由运算器,控制器,寄存器等器件构成的,这些器件由内部总线相连。
对于汇编程序员来说,CPU 中的主要部件就是寄存器。寄存器是 CPU 中程序员可以用指令读写的部件。程序员通过改变寄存器中的内容来实现对 CPU 的控制。
不同的 CPU ,寄存器的个数,结构是不相同的。8086 CPU有14个寄存器,每个寄存器都有一个名称,分别是:
通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指令寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW
其中 8086 所有寄存器都是 16 位的,这就意味着都可以存储两个字节的数据。
通用寄存器以AX为例,一个 16 位的寄存器存储一个 16 位的数据最大值是 $2^{16}-1$ 。
因为 8086 上一代 CPU 中的寄存器都是 8位 的,这样就会存在 8位的程序没有办法运行在 16位的 8086上,为了解决兼容性的问题,**8086给出的解决方案就是将通用寄存器分为两个独 ...
【1.0】基础知识
前言本部分汇编内容是基于 8086 的架构,内容来源学习自王爽老师的《汇编语言》,你可以在 B站或者其他平台查找到相关视频内容,例如:通俗易懂的汇编语言(王爽老师的书)。
汇编系列内容仅作为本人学习记录用途,请自行参考
机器语言众所周知,计算机最开始也是最底层就是二进制的 0 和 1,早期的程序员就是在一堆 0 和 1 中编程。
使用 0 和 1 的机器语言不仅抽象,而且出错不易查找错误,增加了复杂性和难度。
汇编语言的产生早期的程序员为了解决直接使用机器语言所带来的问题,于是产生了汇编语言。
汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于指令的表示方法上,汇编指令更加便于记忆和理解书写的格式。
例如:机器指令 1000100111011000 表示将寄存器 BX 的内容送到 AX 中。汇编指令则写成 mov ax,bx。这种写法更加符合人类的语言和逻辑。
于是,程序员就使用汇编编写程序,然后通过编译器将汇编语言写出的源程序编译成机器码,最终计算机执行指令。
图片来源:王爽老师的《汇编语言》
计算机中的总线在计算机中专门连接 CPU 和其他芯片的导线就是总线,从物理 ...
关于网站搭建那些事(下)
前言这部分是建立在网站服务器搭建完成的基础上改造而来的,如果不知道如何网站搭建,可以查看关于网站搭建那些事(上)。
这部分就是SSL部署,对象存储和CDN加速,WAF以及小部分代码改造部分的指南了,前面网站搭建的文章里解释了DNS,IP,域名以及服务器的搭建的相关内容,此处不做赘述。
关于所有内容都是在我当前博客实现或者实现过的功能,该博客建立——以此纪念我的大学生活
SSL部署什么是SSL?老规矩先解释这是个什么东西,以下斜体定义引用自百度百科:
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
定义依旧很学术,通俗来理解:SSL提供了安全访问保护。对于成功部署SSL的网站,在网站网址左侧会有一把小锁表示安全,如下图(图示浏览器为谷歌浏览器):
SSL证书申请SSL证书提供商SSL有收费的和免费,此处仅演示免费版,SSL证书分为单域名SSL证书,和泛域名SSL证书,关于两者的区别, ...
关于网站搭建那些事(上)
前言
文章最后更新于 2021-11-19 21:01:31 星期五 ,部分内容可能与现在不符,请自行判断
起因之前购买的服务器商说是要给我们提供长期免费的带宽和服务器,但是我感觉它要跑路了,再加上该服务器商数据的不稳定性,综合决定要网站搬迁,前排踩坑提醒(不要轻易购买零度空间的服务器或者其他产品),当时购买的时候是看上了它的香港IP,这样我就可以免去国内备案的麻烦事。
如今不得不购买国内的相关服务器来进行网站搬迁,新网站域名 helloseraphine.top,暂时还在备案中,无法通过域名访问,可以通过公网IP来访问 120.76.134.66
目前服务器和数据库在阿里云,对象存储域名解析在腾讯云,年维护费用100左右(排除人工成本)
为了避免更多的小伙伴踩坑,写下个人博客网站建设教程来帮助后面的小伙伴#网站基础知识在开始建站之前需要了解一些基础知识:
带宽:带宽可以通俗的理解为网速,即别人访问你的网站,你的网站能和它互动的网速
服务器:可以通俗理解为功能偏向于大规模计算应用方面的电脑,记住它也是电脑,不要觉得服务器和电脑差异很大
数据库:存储数据的地方,类似于Excel,但是 ...
CamShar
前言这是半年前开发的一个相对完整的桌面应用软件,名称为:CamShar,是单词Campus(校园)和单词Share(分享)的组合,寓意为:校园共享。现在在博客上补上,之前发的由于数据库迁移删除了。
想法来源这个软件的想法是我们大一的时候在聊天的时候想到的,由于每次考试周考试的时候,都需要去打印店打印相关资料和试卷之类的,甚至有的试卷和目前考试年份差的很远,这样对我们考试很没有帮助,我们希望提供一套解决方案,这样大家每次将自己的资料或者考试题目上传记录,每一级的人考试的时候都会事半功倍,也减少了挂科的风险。
软件实现不过这个想法由于综合原因没有去实现,我和纸人(好友昵称)在去年国庆的时候决定去实现它,我采用的是WPF技术来实现桌面应用软件,纸人使用AndroidStudiio实现安卓端。如下是我留存的软件演示视频:
(function(){var player = new DPlayer({"container":document.getElementById("dplayer0"),"video":{"url":"https://mos.helloseraphine.top:9100/ ...