自学编程
A66623
这个作者很懒,什么都没留下…
展开
-
mysql基础操作5
如果一个关系满足2NF,非主键字段不能依赖于其它非主键字段,即非主键字段之间不能有传递依赖关系,则满足第三范式(3NF)如果一个关系满足1NF,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式(2NF)如果每列都是不可再分的最小数据单元,则满足第一范式(1NF)第一范式的目标是确保每列的原子性。第二范式要求每个表只描述一件事情。一对多搞外键,多对多搞桥表。原创 2023-03-07 18:12:10 · 77 阅读 · 0 评论 -
mysql基础操作4
ADDDATE(d,expr) 返回日期参数d加上一段时间后的日期。SUBDATE(d,expr) 返回日期参数d减去一段时间后的日期。假设每个学生都选择每门课,查询没有选择课程的学生姓名和课程名称。查询st1104班的2011年出生的学生姓名、课程名称、分数。查询所有的班级及学生信息,没有学生的班级也显示 左外连接实现。交叉联接返回左表中的所有行,左表中的每一行与右表中所有行关联。查询学生王甘的老乡的信息 自查询:一张表赋予两种不同的身份。查询所有的班级的学生总人数,显示班级名称和总人数。原创 2023-03-06 13:03:28 · 203 阅读 · 0 评论 -
mysql基础操作3
WHERE c.bjid=s.bjid AND s.stuid=g.stuid AND co.cid=g.cid AND c.bjname='st1101' AND s.stuAddress='襄阳' AND co.cname='JAVA'SELECT saleDate,salesQuantity,(CASE WHEN saleState=1 THEN '新建' WHEN saleState=2 THEN '已下单' ELSE '已发货' END)AS '订单状态'原创 2023-03-03 15:18:39 · 598 阅读 · 0 评论 -
mysql基础操作2
INSERT INTO student(stuAge,stuAddress,stuMajor,stuBirthday,stuName,bjid,stuSex) VALUES(18,'襄阳','计算机','1999-01-01','张三',3,'男');录入一名年龄是18岁的襄阳的计算机专业的1999-1-1出生的名字叫张珊的3号班级的男生信息。AND jiguan IN('襄阳','武汉','广州')%:任意长度的字符串,like ‘co%’,‘%co’,‘%co%’原创 2023-03-01 20:11:17 · 386 阅读 · 0 评论 -
mysql基础操作1
did int PRIMARY KEY auto_increment COMMENT'主键(部门编号)',eid INT PRIMARY KEY auto_increment COMMENT'主键(员工编号)',deptName VARCHAR(20) NOT NULL COMMENT'部门名称',address VARCHAR(100) NULL COMMENT'部门地址'-- 列名 数据类型 约束。原创 2023-03-01 15:20:23 · 331 阅读 · 0 评论 -
1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。时间复杂度:O(n²),n是数组中的元素数量。你可以按任意顺序返回答案。空间复杂度:O(1)原创 2023-02-17 20:13:33 · 752 阅读 · 0 评论 -
排序的基本概念
基本思想:先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。基本思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。也叫桶排序或箱排序:设置若干个箱子,将关键字为k的记录放入第k个箱子,然后在按序号将非空的连接。具体实现:选定一个中间数作为参考,所有元素与之比较,小的调到其左边,大的调到其右边。基本思想:在待排序的数据中选出最大(小)的元素放在其最终的位置。原创 2023-02-16 20:44:20 · 409 阅读 · 0 评论 -
查找的基本概念
散列方法(杂凑法):选取某个函数时,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定值k计算地址,将k与地址单元中元素关键码进行比,确定查找是否成功。根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或记录。查找效率:ASL=Lb+Lw(对索引表查找的ASL+对块内查找的ASL)查找算法的评价指标:关键字的平均比较次数,也称平均查找长度。关键字:用来标识一个数据元素(或记录)的某个数据项的值。查找表是由同一类型的数据元素(或记录)构成的集合。原创 2023-02-16 18:07:33 · 357 阅读 · 0 评论 -
图基本概念
连通图(强连通图):在无(有)向图G=(V,{E})中,若对任何两个顶点v,u都存在从v到u的路径,则称G是连通图(强连通图)极小连通子图:该子图是G的连通子图,在该子图中删除任何一条边,子图不在连通。简单回路(简单环):除路径起点和终点相同外,其余顶点均不相同的路径。简单路径:除路径起点和终点可以相同外,其余顶点均不相同的路径。生成森林:对非连通图,由各个连通分量的生成树的集合。回路(环):第一个顶点和最后一个顶点相同的路径。邻接:有边/弧相连的两个顶点之间的关系。路径:接续的边构成的顶点序列。原创 2023-02-15 19:48:32 · 305 阅读 · 0 评论 -
哈夫曼树(最优二叉树)
结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权的乘积。权:将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。树的路径长度:从树根到每一个结点的路径长度之和。结点数目相同的二叉树中,完全二叉树是路径长度最短的二叉树。树的带权路径长度:树中所有叶子结点的带权路径长度之和。哈夫曼树:最优二叉树树(带权路径长度最短的二叉树)结点的路径长度:两结点间路径上的分支数。哈夫曼树:最优树(带权路径长度最短的树)原创 2023-02-15 19:18:25 · 260 阅读 · 0 评论 -
树和森林。
用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点。将树转化为二叉树进行处理,利用二叉树的算法来实现对树的操作。二叉树转换成森林:去掉全部右孩线,孤立二叉再还原。先序遍历:从左至右对森林中的每一棵树进行先根遍历。中序遍历:从左至右对森林中的每一棵树进行后根遍历。存放树的结点,每个结点含两个域:数据域,双亲域。树:是n个结点的有限集。森林转换成二叉树:树变二叉根相连。森林:是m棵互不相交的树的集合。森林中第一棵树的子树森林。森林中其它树构成的森林。原创 2023-02-15 17:16:14 · 278 阅读 · 0 评论 -
遍历二叉树
先序遍历(根左右);中序遍历(左根右);后序遍历(左右根)。层次遍历:从根结点开始从上到下,从左到右。算法设计思路:使用一个队列。若二叉树为空,则空操作;复制二叉树(递归复制)原创 2023-02-15 16:16:11 · 65 阅读 · 0 评论 -
二叉树性质
完全二叉树:深度为k的具有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应时,称之为完全二叉树。链表中每个结点由四个域组成,除了数据域之外,还有三个指针域,分别用来给出该结点的左孩子、右孩子和双亲结点所在的存储地址。链表中每个结点由三个域组成,除了数据域之外,还有两个指针域,分别用来给出该结点的左孩子和右孩子所在的存储地址。二叉树的顺序存储:按满二叉树的结点层次编号,依次存放二叉树中的数据元素。如果2i>n,则结点i为叶子结点,无左孩子;否则,其左孩子是结点2i。原创 2023-02-14 21:46:19 · 179 阅读 · 0 评论 -
树和二叉树
有序树:树中结点的各子树从左至右有次序。(最左边的为第一个孩子)度≠0,分支结点,非终端结点,根结点以外的分支结点称为内部结点。结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。给森林中的各子树加上一个双亲结点,森林就变成了树。结点的祖先:从根到该结点所经分支上的所有结点。结点的子孙:以某结点为根的子树中的任一结点。根结点:非空树中无前驱结点的结点。无序树:树中结点的各子树无次序。森林:是m棵互不相交的树的集合。树的深度:树中结点的最大层次。具有两个结点的树只有一种状态。结点的度:结点拥有的子树数。原创 2023-02-14 20:43:13 · 119 阅读 · 0 评论 -
广义表。。
广义表中的数据元素有相对次序;一个直接前驱和一个直接后驱;广义表的深度定义为该广义表展开后所含括号的重数;拓宽了的线性表就是广义表;广义表是线性表的推广。广义表的长度定义为最外层所包含元素的个数;广义表是多层次的结构。原创 2023-02-14 20:08:03 · 68 阅读 · 0 评论 -
特殊矩阵的压缩存储
三元组顺序表的优点:非零元在表中按行序有序存储,便于进行依行顺序处理的矩阵运算。优点:能够灵活的插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素。重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间。压缩存储原则:存各非零元的值、行列位置和矩阵的行列数。三元组的不同表示方法可决定稀疏矩阵不同的压缩存储方法。对称矩阵上下三角中的元素数均为:n(n+1)/2。三元组顺序表的缺点:不能随机存取。以对角线的顺序存储(用二维数组)稀疏矩阵的链式存储结构:十字链表。原创 2023-02-14 19:49:51 · 82 阅读 · 0 评论 -
串和BF算法、KMP算法
字符位置:字符在序列中的序号为该字符在串中的位置。且主串S的指针i不必回溯,可提速到O(n+m)。空格串:由一个或多个空格组成的串,与空串不同。BF算法,亦称简单匹配算法。利用已经部分匹配的结果而加快模式串的滑动速度。子串位置:子串第一个字符在主串中的位置。字串:串中任意个连续字符组成的子序列。i=i-j+2 (回溯)算法复杂度O(n*m)主串:包含子串的串。j=1 (从头开始)原创 2023-02-14 18:18:05 · 66 阅读 · 0 评论 -
栈和队列。
栈:限定仅在一端(通常是表尾)进行插入和删除操作的线性表。栈和队列是限定插入和删除只能在表的“端点”进行的线性表。存储结构:顺序队、链队,以循环顺序队列更常见。十进制整数N向其它进制数d转换。存储结构:顺序栈、链栈。转换法则:除以d倒取余。原创 2023-02-14 16:23:14 · 48 阅读 · 0 评论 -
线性表的链式表示
首元结点:链表中存储第一个数据元素a1的结点。头结点:在链表的首元结点之前附设的一个结点。链表:n个结点由指针链组成一个链表。头指针:指向链表中第一个结点的指针。单链表:结点只有一个指针域的链表。双链表:结点有两个指针域的链表。单链表是由头指针唯一指定。结点:数据元素的存储映像。循环链表:首尾相接的链表。原创 2023-02-13 21:40:09 · 55 阅读 · 0 评论 -
线性表顺序存储
顺序表示:将逻辑上相邻的元素存储在物理位置上也相邻的存储空间中。属于静态存储形式,数据元素的个数不能自由扩充。在插入,删除某一元素时,需要移动大量元素。可以随机存取表中任一元素。判断线性表L是否为空。原创 2023-02-13 21:12:45 · 61 阅读 · 0 评论 -
程序=数据结构+算法
空间复杂度:算法所需存储空间的度量,S(n) = O(f(n)),n为问题的规模。算法运行时间=Σ每条语句的执行次数(语句频度)*该语句执行一次所需的时间。抽象数据类型=数据的逻辑结构+抽象运算(运算的功能描述)数据对象:性质相同的数据元素的集合,是数据的一个子集。数据的运算和实现(有效地实现对象之间的“运算”关系)算法的时间量度记作:T(n) = O(f(n))逻辑结构(研究对象的特性及其相互之间的关系)数据元素:组成数据的基本单位,是集合的个体。物理结构或存储结构(有效的组织计算机存储)原创 2023-02-12 21:37:14 · 170 阅读 · 0 评论 -
#define定义宏
库文件包含(C语言库中提供的函数的头文件使用)本地文件包含(自定义的函数的头文件使用)宏通常被应用于执行简单的运算。允许把参数 替换 到文本中。这条指令用于移除一个宏定义。原创 2023-02-12 15:55:02 · 69 阅读 · 0 评论 -
预处理(预编译)
这个时候程序将使用一个运行的堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。test.c--翻译环境--test.exe--运行环境--运行结果。预处理之后就停止,预处理之后产生的结果都放在test.i文件中。如何实现一个编译器,编译器的工作原理。#define定义的符号和宏的替换。link.exe链接(链接器).编译(编译器)cl.exe。预编译--编译--汇编。程序必须载入内存中。原创 2023-02-11 22:18:51 · 120 阅读 · 0 评论 -
文件。。。
文件名:文件路径+文件名主干+文件后缀。可执行程序(.exe)目标文件(.obj)原创 2023-02-10 17:40:58 · 55 阅读 · 0 评论 -
动态内存开辟常见的错误
动态开辟的空间忘记释放--内存泄漏--比较严重。使用free释放动态内存中的一部分。使用free释放非动态开辟的空间。对同一块动态开辟的空间,多次释放。对NULL指针的解引用操作。对动态开辟空间的越界访问。原创 2023-02-09 20:14:51 · 53 阅读 · 0 评论 -
通讯录。。
contact.h类型定义函数声明contact.c函数的实现test.c测试通讯录的模块。原创 2023-02-08 22:17:08 · 78 阅读 · 0 评论 -
sizeof基本运用
/4/8,&a虽然数组的地址,但也是地址。//4/8,第二个元素的地址的大小。//4/8,数组后面的空间的地址。sizeof(数组名)--数组名表示整个数组的--计算的是整个数组的大小。原创 2023-02-07 19:49:37 · 66 阅读 · 0 评论 -
c指针进阶
parr3是一个存储数组指针的数组,该数组能够存放10个数组指针,每个数组指针能够指向一个数组,数组5个元素,每个元素是int类型。//对void(*)(int)的函数指针类型重命名。//2. (void(*)())0 --对0进行强制类型转换,被解释为一个函数地址。//3. *(void(*)())0 --对0地址进行了解引用操作。//4.(*(void(*)())0)() --调用0地址处的函数。//1. void(*)() --函数指针类型。// &函数名--取到的就是函数的地址。原创 2023-02-07 17:59:20 · 48 阅读 · 0 评论 -
数据的存储
构造类型(自定义类型):数组、结构体struct、枚举enum、联合体union。把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处。把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处。整形家族(unsigned;signed):最大65535。11223344(从左到右,从低到高。原创 2023-02-06 21:50:20 · 68 阅读 · 0 评论 -
c结构体基础
/函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。print2(&s);//传址调用 (更好)每一个函数调用都会在内存的栈区上开辟一块空间。结构体:一些值的集合。但是值的类型可以不同。栈:是一种数据结构,先进后出,后进先出。结构体传参的时候,要传结构体的地址。print1(s);数组:一组相同类型的元素的集合。原创 2023-02-05 19:10:53 · 43 阅读 · 0 评论 -
c二级指针
/pa也是个变量,&pa取出pa在内存中起始地址。//a的地址存放在pa中,pa是指针变量,一级指针。//pa的地址存放在ppa中,ppa是二级指针。指针数组--存放指针的数组。整型数组--存放整形的数组。字符数组--存放字符的数组。原创 2023-02-05 18:01:31 · 44 阅读 · 0 评论 -
c操作符..
printf( “%u\n”,sizeof(c)) //1 %u无符号位十进制整形。sizeof(+c) //4 只要参与运算,就整形提升,和sizeof无关。sizeof--操作符--计算变量/类型所占内存大小,单位是字节。strlen--函数--求字符串长度,找\0之前出现的字符个数。比int小的(char,short)提升。整型提升//符号位提升。原创 2023-02-04 18:12:42 · 56 阅读 · 0 评论 -
c操作符。。。。
算术操作符:+,-,*,/,%;6.0/5=1.2(两端至少一个是浮点数,可以算出小数);//输出2,起作用的是(char)s。右移:1.算数右移:右边丢弃,左边补原符号位(正0负1);//pa是用来存放地址的,*说明pa就是一个指针变量。逗号表达式//从左向右依次计算,但整个表达式的结果是最后一个表达式的结果。位操作符(整数):& 按(二进制)位与,|按位或,^按位异或·a = a+100,a+=100;a^b (异或):相同为0,相异为1。原创 2023-02-03 22:21:57 · 53 阅读 · 0 评论 -
随机数rand()
RAND_MAX 是 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。产生 13~63 范围内随机数。原创 2023-02-03 12:55:44 · 86 阅读 · 0 评论 -
c冒泡排序
void bubble_sort(int arr【】,int sz) // 形参arr本质是指针。//数组传参的时候,传递的是数组首元素的地址。sizeof(数组名)--数组名表示整个数组--计算的是整个数组的大小单位是字节。&数组名--数组名表示整个数组--取出的是整个数组的地址。两两相邻的元素进行比较,并且可能的话需要交换!//一趟冒泡排序的过程。//排序为升序--冒泡排序。//计算数组元素个数。数组名是数组首元素的地址。原创 2023-02-02 22:24:45 · 49 阅读 · 0 评论 -
c二维数组
/不完全初始化--补0。arr【0】可以认为是(二维数组的)第一行的一维数组的数组名。二维数组在内存中也是连续存放的,一行内部连续,跨行也是连续。创建 // int arr【3】【4】;二维数组行可以省略,列不能省略 // 【】【4】初始化 --创建的同时给赋值。原创 2023-02-02 21:39:47 · 63 阅读 · 0 评论 -
c一维数组
等价 int arr[] = {1,2,3,4,5};//不完全初始化,后面补0。2.随着数组下标的增长,地址是由低到高变化的。%p --按地址的格式打印--十六进制的打印。数组类型 数组名字【常量表达式】1.一维数组在内存中是连续存放的。3.数组名是数组首元素的地址。一组相同类型元素的集合。%x --十六进制输出。原创 2023-02-02 21:04:49 · 65 阅读 · 0 评论 -
c函数递归
堆区:动态内存分配的,malloc/free,calloc,realloc。不能死递归,都有跳出条件,每次递归逼近跳出条件。栈溢出(stack overflow)静态区:全局变量,静态变量。栈区:局部变量,函数形参。原创 2023-02-02 14:29:30 · 49 阅读 · 0 评论 -
for;传值调用传址调用
/传值调用 // 改变形参,不能改变实参(形参相当于实参的一份临时拷贝)} // *pa是a,是变量, int* t是指针变量,只能存地址,不能存a。字符串比较使用 strcmp(password,"abcd")==0 //说明两个字符串长度相等。printf("交换前:a=%d b=%d\n",a,b);printf("交换后:a=%d b=%d\n",a,b);i=0时进来,进行3次循环,打印3个hehe之后,j=3,原创 2023-02-02 09:43:30 · 62 阅读 · 0 评论 -
循环语句while
continue的作用是跳过本次循环continue后面的代码,直接去判断部分,看是否进行下一次循环。在while循环中,break用于永久的终止循环。数组的数组名本身是一个地址。原创 2023-02-01 19:12:30 · 44 阅读 · 0 评论