自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 表的三范式和约束

3NF、确保每个字段都与主键直接相关,而不是间接相关,如果是可以通过消除冗余项或者拆表来满足。约束是对表和表中数据的限制,可以提高表中数据的准确性和可靠性,一般在创建表、修改表时使用。②修改表时设置约束:只有not null\default 有效,可以增加、删除约束。一张表(子表)的值必须引用自另一张表(父表),并且被引用的父表的字段必须具备。在使用关系型数据库的过程中总结的三项建立表的准则,如果遵守它能够。一般在创建表的外键约束时,需要先创建父表,再创建子表。注意:应该先插入父表数据,再插入子表数据。

2023-09-12 20:43:36 177

原创 select语句

对于null状态,只能通过 is null、is not null 来判断该字段是否为空状态,在SQL中null不是一个特定的值,而是一种状态,因此不能直接使用关系运算符比较。主要通过设置连接条件的方式,来移除查询结果中无效的数据行的交叉连接结果,就是消除了无效的"笛卡尔积",也称为"等值连接",然后再从海量的结果中根据where条件筛选出合适的结果,如果"笛卡尔积"非常大时,交叉连接查询的效率就很低。Ⅰ以表1为主表,表2为副表,会把表1的数据都查询出来,表2只查询符合连接条件的数据。

2023-09-12 20:42:18 405

原创 SQL语句

create table 表名(字段名 字段类型,...);sex char,age int,id int,-- 查看当前数据库中所有表名-- 查看表结构desc 表名;-- 查看创建该表的SQL语句show create table 表名;

2023-09-12 20:38:57 177

原创 数据库、SQL语言简介

①磁盘->高级缓存->寄存器->CPU数据存储在内存中,但是内存大小有限、不可能存储所有数据,并且掉电后数据丢失②为了让程序在关机重启后数据依然可以使用,必须把数据保存在磁盘文件中③随着程序功能越来越复杂、数据量也越来越多、数据关系也越来越复杂,从文件读写数据需要大量复杂、重复性高的操作,因此需要执行非常复杂的逻辑④不同程序、系统访问文件的操作不同,意味着读写文件的代码很难做到代码复用⑤所以程序员非常需要一个统一的快速地访问磁盘数据的工具。

2023-09-12 20:36:58 130

原创 数据库的搭建

①设置虚拟机工具的网络连接为桥接网卡,确保Ubuntu和Windows在同一网段,能相互ping通(防火墙全关闭)②点击+号创建连接,填写连接名(随意)、ip(Ubuntu系统的ip)、用户名(user1)、点击ok保存连接。③双击登录、添加密码、保存密码。

2023-09-11 20:42:13 433

原创 功能受限的表结构——栈

让两个顺序栈相邻,且入栈方向相对入栈,能够让内存空间利用率最大化。①某序列为入栈序列,判断哪个序列为正确\不正确的出栈序列。Ⅲ空减栈:top: cal-1开始 先入栈,再top–②运算:创建、销毁、入栈、出栈、栈顶、栈空、栈满、数量。Ⅱ满增栈:top: -1开始 先top++,再入栈。Ⅳ满减栈:top: cal开始 先top–,再入栈。①数据项:存储元素的内存首地址、栈的容量、栈顶位置。Ⅰ空增栈:top: 0开始 先入栈,再top++②运算:创建、销毁、入栈、出栈、栈顶、栈空、数量。

2023-09-08 21:01:52 87

原创 链式表的实现

定义:第一个节点作为头节点,数据域不使用不存储有效数据,它的指针域永远指向链表的第一个有效数据节点,就算链表长度为0,头节点依然存在。优点:当插入、删除时是不会改变头节点的指向,只需要改变它的next,因此无需传递头节点的二级指针,并且实现时无需区分两种情况。缺点:当插入、删除时可能会改变第一个有效节点,传递的参数需要传递二级指针,实现时需要区分是否是操作第一个有效节点,较为麻烦。注意:有效节点的处理必须从头节点的next开始。定义:第一个节点的数据域存储的是有效数据。②指针域:指向下一个节点的指针。

2023-09-08 20:26:06 143

原创 链式表的实现

①数据域:可以是各种类型的若干项数据项。②指针域:指向下一个节点的指针。

2023-09-08 20:08:53 216

原创 顺序表的实现

创建、销毁、清空、插入、删除、访问、查询、修改、排序、遍历。①要确保数据元素的连续性。①存储元素的内存首地址。

2023-09-08 20:07:24 88

原创 什么是数据结构

1968年,美国高德纳教授,《计算机程序设计艺术》第一卷《基本算法》提出,开创了数据结构与算法的先河数据结构是一门研究数据之间关系、操作的学科,而非计算数据方法数据结构 + 算法 = 程序揭露了程序的本质,沃思凭借这个观点获得了图灵奖。

2023-09-08 20:06:54 96

原创 C语言文件读写

每个打开的文件都有一个指针记录这读写操作的位置,它会随着读写函数的执行而自动移动,所以以r、r+、w、w+方式打开文件位置指针默认在文件开头,以a、a+方式打开文件位置指针默认在文件末尾。平时顺序读写时不用关注位置指针,当需要随机读写文件时可以通过手动设置文件指针的位置来进行。是人能看得懂的文件,存储的是字符符号的ASCII码的二进制 ‘2’ ‘5’ ‘5’返回值:文件指针(结构指针),不需要关心它的成员,只需要知道它是操作文件的凭证。注意:文件读写有有缓冲区机制,想要立即写入,需要关闭文件后才能看到。

2023-09-07 21:03:37 151

原创 结构、联合、枚举

struct 结构体类型名 结构体变量名;注意:C语言中在定义结构变量时,struct关键字不能省略①枚举常量需要占用内存,而定义宏常量不占用内存②枚举常量的设计目的是为了限制实际数据输入、定义宏是为了完成代码的替换和维护③枚举常量是具有类型,宏定义没有类型。

2023-09-07 17:16:52 141

原创 基于C语言的多文件编程2048小游戏

【代码】基于C语言的多文件编程2048小游戏。

2023-09-07 16:37:24 107

原创 UML介绍

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

2023-09-07 15:23:09 89

原创 关联性容器

关联性容器可以实现快速查找(O(logn))的容器线性容器中array、vector、list、deque都可以使用进行顺序查找(O(n)),必须支持operator==比较底层实现 红黑树。

2023-09-04 20:06:20 287

原创 deque容器

deque的元素不是全部相邻存储的:采用单独分配的固定大小数组的序列存储数据,以及额外的登记表(中控数组),该表中记录了所有序列的地址,这表示通过下标访问元素时必须经过两次指针解引用,vector只需要一次。①与vector相比,头部插入、删除时,不需要搬运后序元素,效率特别高(O(1));底层采用vector实现,当数据入队时,会对数据调整成堆结构,默认是大顶堆,元素越大,优先级越高,优先出队。①vector扩容,先申请一块更大的新内存,把原内存数据拷贝,释放原内存。底层由deque实现的。

2023-09-04 20:04:01 194

原创 STL模板工具

采用顺序结构存储数据,可以使用下标进行随机访问,有时候也叫做数组容器(C++11中增加了array容器,定长数组,相比普通数组它是类类型,增加成员函数,提高安全性),可以自动扩容,容器中的元素存储在连续内存,支持随机访问O(1),尾插入、尾插入效率O(1),但是在指定位置进行插入、删除效率O(n),因为要保证数据的连续性。=,<=,>=,<,>,对容器整体比较,会对两个容器中的元素按顺序一次比较,一旦某个元素比较出结果就立即返回。

2023-09-04 19:45:32 609

原创 智能指针与异常处理

当一个常规指针离开了作用域时,只有该指针变量本身占用的内存空间(4/8)会被释放,而它指向的内存空间不会自动释放,当free/delete/delete[]语句忘记执行或者无法执行,形成内存泄露(如何定位内存泄露、如何预防内存泄露)智能指针是一个封装了常规指针的类类型对象,并且重载了*和->运算符,使用起来与常规指针相近当智能指针离开作用域时,它的析构函数必定执行,从而在析构函数中执行释放常规指针的操作,这样就做到了自动释放的效果,从而避免内存泄露智能指针是一个类模板auto_ptr、shared_ptr、

2023-09-04 18:47:23 209

原创 C++模板

是一种自动生成代码的技术,这种技术能让程序员在编写代码时不需要考虑数据类型,因此也称为泛型编程技术未知类型名可以任意取名字,一般约定Tclass 类名T1 成员变量;return ret;

2023-09-02 11:13:41 116

原创 C++文件读写

由于ostream/istream分别是ofstream/ifstream的父类,因此如果重载了>> <<运算符,既可以用于平时输出、输入类对象,并且还可以直接用于类对象的文本方式流操作读写。C++为文件IO流提供了两套设置位置指针的成员函数,为了兼容一些有两个位置指针的操作系统,但是UNIX、Linux、Windows系统底层只有一个文件位置指针,所以使用哪套都没区别。fstream类 默认以读写方式O_RDWR打开文件,文件不存在则失败,文件存在不清空 “r+”流对象名 执行了该类的!

2023-09-02 10:27:09 148

原创 虚函数与多态

指的是一条指令可以有多种形态,当调用一个指令时,它能够根据参数、环境的不同作出不同的操作,这种情况称为多态C++中根据确定指令具体操作的时间划分多态:编译时多态、运行时多态当使用多态时且子类的析构函数中有需要释放的资源,此时父类中就必须设置为虚析构。

2023-09-02 09:37:18 90

原创 C++继承

1、当遇到问题时先查看现有的类是否能解决一部分问题,如果有则继承该类,并在此基础上扩展以此解决问题,从而缩短解决问题的时间(代码复用)2、当遇到一个大而复杂的问题时,可以把大问题拆分成若干个不同的小问题,然后为每个小问题设计一个类来解决,最后通过继承的方式把这些类汇总到一个类中,从而解决大问题,以此降低问题的难度,可以同时让多个程序员共同解决大问题派生类继承基类 子类继承父类。

2023-08-28 18:33:22 75

原创 基于C++实现NetWork

【代码】基于C++实现NetWork。

2023-08-25 20:20:14 472

原创 静态成员和运算符

被static修饰的成员变量和成员函数就叫静态成员只能实例化一个类对象。

2023-08-25 20:19:37 149

原创 对象和成员函数

的,但是可以。

2023-08-25 20:17:57 180

原创 面向对象和类

类是由程序员设计一种数据类型,里面包含有成员变量、成员函数而对象就是类的实例化,可以理解为使用类类型创建的变量,创建的过程叫做实例化。

2023-08-25 20:16:30 74

原创 C++的强制类型转换

因为他认为只有在程序设计不合理的情况下才需要强制类型转换,之所以设计复杂就是不想让程序员使用,而是去反思、重新设计自己的代码。目标类型和原数据类型之间必须有一个方向能够自动类型转换,否则出错。目标类型和原数据类型之间必须存在继承关系,并且目标类型必须是。为什么C++之父设计强制类型转换设计得很复杂、使用很麻烦?,且除了const属性不同,其他都要相同,否则出现报错。因为C语言的强制类型转换,虽然自由度高,但是非常危险。只能把整数转成指针,或者把指针转成整数,否则会出错。,数据原来的类型不会改变。

2023-08-25 20:14:19 214

原创 C++引用

引用就是一种取别名的机制为什么要使用指针:①跨函数进行共享变量(输出型参数),引用可替代②提高传参效率,引用可替代,效率比指针还高,不拷贝字节③配合堆内存使用,只能使用指针④配合字符串使用,string类可以替代。

2023-08-25 20:13:40 71

原创 默认形参与内联函数

在C++中可以给函数的参数设置默认值,当函数被调用时如果调用者提供了实参则使用实参调用,如果没有提供则使用默认值调用内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内联函数的二进制指令进行替换,这样就没有跳转和返回,而是直接执行二进制指令,这种称为内联函数。

2023-08-25 20:12:36 90

原创 C++函数重载

在同一作用域下,函数名相同,参数列表不同的函数构成重载关系函数重载与返回值类型、参数名无关与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关。

2023-08-25 20:11:47 70

原创 C++介绍

是C++中一种对命名空间进行逻辑划分的一种技术变量;函数;结构、联合、枚举;类;...定义了名字空间后形成了一个相对封闭的作用域空间a.ha.cpp注意:可以分开定义,但是必须加上 名字空间名::变量名。

2023-08-25 20:10:52 89

原创 Makefile与多文件编程

在终端执行 make 命令就会自动执行Makefile脚本中的编译指令,它可以根据文件的修改时间、和依赖关系来判断哪些文件需要编译,哪些不需要编译。③如果这个工程的头文件被改变了,那么引用了这几个头文件的c 文件都会重新编译,并链接目标程序。②如果这个工程的某几个c 文件被修改,那么我们只编译被修改的c 文件,并重新链接目标程序。Makefile是由一系列的编译器指令组成的可执行文件,叫做编译脚本。①如果这个工程没有编译过,那么我们的所有c文件都要编译并被链接。

2023-08-19 17:09:24 188

原创 头文件包含内容

假如a.h包含了b.h的内容,而b.h中又包含了a.h的内容,这时就会产生头文件的相互包含,无法编译通过。解决方案:把a.h中需要b.h的内容,和b.h中需要a.h的内容提取出来,额外再写另一个c.h。②如果需要用到某个.c文件中的变量、函数、宏时,只需要把该文件的.h文件导入即可。①为每个.c文件写一份.h文件,.h文件是对它对应的.c文件的说明。③.c文件也要导入自己的.h文件,目的是为了让定义与声明保持一致。:头文件只编写声明语句,不能有定义语句。⑥结构、枚举、联合的类型设计声明。

2023-08-19 16:29:58 131

原创 预处理与宏定义

程序员所编写的代码不能被真正的编译器所编译,需要先经过一段程序翻译一下翻译的过程称为预处理,负责翻译的程序称为预处理器,被翻译的语句叫做预处理指令,以#开头的都是预处理指令查看预处理的结果:gcc -E code.c 把预处理的结果显示到终端gcc -E code.c -o code.i 把预处理的结果存储到.i预处理文件预处理指令的分类:#include 头文件导入(拷贝)#include <> 从系统指定路径查找头文件。

2023-08-19 16:15:24 78

原创 字符串与缓冲区

情况1:需要输入的是整型\浮点型时,而缓冲区中的数据是字符型或符号时,此时读取会失败,并且该数据会继续残留在输入缓冲区中,会继续影响剩下的输入。情况3:当先输入整型或浮点型,再输入字符型时,输入完整型或浮点型后按下的回车或空格,会残留在输入缓冲区,刚好被后面的字符型接收,影响输入。程序中输入的数据并不会立即从键盘接收到变量中,而是当按下回车后先存储到输入缓冲区中,然后再从缓冲区中读取到变量内存中。字符:人能看得懂的符号或图案,在内存中以整数形式存储,根据ASCII码表中的对应关系显示出相应的符号或图案。

2023-08-19 14:50:39 245

原创 堆内存的使用

①当首次向malloc申请内存时,malloc会向操作系统申请堆内存,操作系统会直接分配33页(1页=4096字节)内存给malloc管理,但这样不意味着可以越界访问,因为malloc可能会把内存分配给"其他人"使用,这样就产生了脏数据。②每个内存块之间一定会有一些空隙(4~12字节),一部分空隙是为了内存对齐,其中一定有4个字节用于记录malloc的维护信息,如果维护信息被破坏会影响下一次的free的调用。功能:从堆内存中申请size个字节的内存,申请成功会得到连续的内存。

2023-08-19 11:02:17 161

原创 指针的基本内容

指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,该数据代表了内存的编号(地址),可以通过这个编号访问到对应的内存。

2023-08-19 09:48:45 130

原创 基于C语言的五子棋项目

每次都要自己数坐标过于繁琐,因此将落子部分由输入坐标改为由键盘移动光标决定。1、定义15 * 15棋盘二维数组。3、定义变量 用于记录落子位置。

2023-08-18 20:50:35 140 1

原创 进程的内存分布

程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)进程映像:进程的内存分布情况。进程:正在系统中运行的程序。

2023-08-18 19:59:22 116 1

原创 C语言函数

C语言标准委员会以函数形式提供的一些基础功能,都被封装在libc.so库中,并且分在了不同的文件中,需要使用时只要把对应的头文件导入即可(例如stdio.h…注意:目前任何编程语言和系统都没有真正的随机数,C编译器是把从0~极大值范围的数值打乱后,存储到一块固定内存中,然后从里面取所谓的随机数。功能:种随机种子,设置从随机数内存的某个位置开始取随机数,为了实现类似真随机的效果,seed位置一般使用time(NULL)来设置。②数据一般要由调用者提供,只把结果返回给调用者,确保函数的通用性。

2023-08-18 19:12:16 59 1

空空如也

空空如也

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

TA关注的人

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