- 博客(31)
- 收藏
- 关注
原创 C++符号匹配判断
符号匹配的核心思想是利用顺序栈来解决,此处的符号只有四类“{}”,“[]”,“<>”,“()”,输入一串符号 ,其中如果是“{[(<”这四种,则直接放入栈中,反正如果是“)}]>”这四类则要考虑栈中当前的符号是否与之对应,很显然,如果当前栈中的符号不匹配,那么符号必定不匹配。反之最后进行一系列入栈出栈后,这串字符串已经遍历完毕且栈为空,那么符号匹配成功。代码如下bool bracket(char *chars){ Stack<int> stack = Stac.
2021-03-06 20:26:19
1206
1
原创 C++基数排序
基数排序也是分配排序:以下面的这个数组作为例子以上面的例子来说,要将他排序的话,首先基数排序的思想,可以按照数值的个位数的大小先排一次序,并且按照顺序将数据给记录下来,然后再将数值的十位拍一次序,在前一次的基础上此时的个已经是有序的,将十位再排一次序的话则数组的数的十位之后个位与十位的数值都是有序的,以此类推,一直排下去就能将是整个数值有序由于这个排序是按照数值的个位或是十位的排序,所以要知道,最大值的最大位数是多少,还要知道,某数值的某位数为多少求最大值的最大位数代码:int getmax
2020-11-21 23:28:53
702
原创 C++直接排序
直接排序也叫分区交换排序直接排序的思想:即在一个文件中选择一个值,则以这个值为中间值,比它大的放右边,小的放左边,此时可以找出所以比它大的值在右边,比他小的值在左边,此时再将比这个中间值小的再次排序一次 ,大的排序一次,显然有递归的思想在里面快速排序中要知道起始位置与终止位置,上面所说的之间值可以文件中的任意值,在这里还是设为起始位置直到中间值之后就要开始比较大小由于中间值设置为起始位置,所以可以从终止位置开始比较,终止位置在后面,所以一定大于中间值,如果大于则比较终止位置的前一个直到小于中间值时,
2020-11-19 00:26:21
1722
5
原创 C++冒泡排序
冒泡排序也是一种较为简单的交换排序:冒泡排序的思想:在一组长度为len的数组中,冒泡排序总共会排n-1遍,而一遍都会找出当前数组的最大值或是最小值下面为第一遍的过程,此时就是要找到当前数组的最大值,那么就要开始将下标为0与下标为1的值相比较,在本案例中为升序排序,所以判断arr[i]>arr[i+1]时,则说明arr[i]大,则要交换两者的值,交换之后大的值在下一个位置,再将这个值较大与它的下一位比较,这样比较到最后一个值时,就可以找到当前的最大值在第一遍遍历完之后,找到了最大的
2020-11-16 23:00:52
162
2
原创 C++希尔排序
希尔排序的思想较为巧妙,它的思想:将要排序的文件分为n个组,距离为s的分为一组,再将这一组进行排序,完成这个操作之后,再将s的值变小继续排序直到距离为零时下图进行第一次排序:首先要知道一个距离的值,这个值可以设为数组长度的一半(超过的话第一次排序不能将所有的数值都排序一次),在本案例中为4,初始值可以设为从下标为4的元素开始,这样正好可以使这个数组从下标为0的位置比较,元素都可以进行排序一遍第一遍时,距离较大,每组所记录数较少,所以速度较快。后面的几次排序时,距离就会缩小,缩小的原则为除以2,在第二次
2020-11-09 23:55:54
363
原创 C++折半插入排序
折半插入排序思想:在排序第i个数时,前i-1个数已经排序完成,这是折中排序的前提,所以在开始排序时起始位置为i=1折中排序,顾名思义就是折中,所以在折中排序时,先要以谁开头以谁结尾,所以需要定义两个变量front,end,有了这两个变量才能够找到他们的中间值mid排序的最终目的还是找到i的最终插入位置,本代码要求升序排序,所以只需找到比下标为i的数小的数的下标以此时只需将mid的值与i的值作比较,如果arr[i]<arr[mid]的话,此时说明下标为i的插入位置为[0,mid-
2020-11-07 00:03:55
2171
2
原创 C++直接插入排序
直接插入排序在排序中较为简单:在上面数组中,长度为5,而直接插入排序的思想就是:在第一遍的时候,第i-1个到前面的都为有序的数组(所以i的位置应该从下标1开始)而此时的第i个元素就是要排序,由于前i-1个元素是有序的,所以只需要找比i的元素大的或者小的下标就像上图中的当i=1时此时要找到比arr[i]小的数,如果是比它大的话,那么将这个这个与他比较的数组向后移动,再次与前一个数组比较但是向前移动的这个动作不能一直下去,停下来的条件是i不能小于等于0代码如下:DirectInsertSo
2020-11-06 00:07:53
2511
4
原创 数据结构C++:链表
顺序表的优点是能够快速查找,但是在进行删除和添加操作时,效率不高。而链表查找的效率没有顺序表那么快,但是删除与添加操作的速度较快链表不像顺序表,在内存中是连续的,所以链表的结构中不仅要有所存储的数值,还要有下一个节点的信息。插入操作首先将要插入的节点指向下一个节点再将下一个指向要插入的节点代码如下:template <class T>Node<T>::InsertAfter(Node<T> * p){ p->next = next; nex
2020-10-31 23:39:45
294
2
原创 数据结构学习C++:队
队是一种线性表,它进队的一端是队尾,出队的一端是队头由于队只能在队尾插入队元素,在队头删除队元素,所以先入队的元素可以先出队,后入队的元素后出队,所以队是先进先出表或者后进后出表1.队的构造函数根据队的需求,首先是需要申请一组连续的内存空间申请内存空间得知道内存空间的最大长度再进行一系列操作时,还要有队头和队尾,所以还需要,队头指针和队尾指针,且初始化为front=rear=02.队的判空判满问题首先要知道front是指向队头的,而rear是指向队尾的下一个位置由于队的数据结构只能在队
2020-10-29 14:31:00
718
原创 数据结构学习C++:栈
栈也是一种线性表,它的插入与删除都只能在一端进行,这一端叫做栈顶,另一端称为栈底。插入元素叫做进栈,删除元素叫做出栈。由于栈只能在一端进行插入与删除,那么后插入的元素可以先删除,先插入的元素后删除,所以栈是先进后出表,或是后进先出表。1.构造函数一系列的操作都与栈顶分不开,所以一定要定义栈顶指针,栈顶指针是指向当前要操作的元素的,在没有插入任何元素的情况下,栈顶指针top应该为-1.还要设置栈空间的大小MaxSize申请长度为MaxSize的内存,来储存栈元素代码如下:template &
2020-10-28 16:56:07
354
原创 数据结构学习C++:线性结构
线性表的插入操作:1.首先在插入数据之前是要先判断一下数组已满和查找下标是否合法2.在指定位置i插入数据x,原来就是将下标为i与i后面的数据向后移3.i位置已经腾出来,此时将x插入代码如下template <class DataType>void SeqList<DataType>::Insert(DataType x,int i){ if(len >= MaxSize) throw "Overflow"; if(i <1 ||i>len+1)
2020-10-27 14:57:13
415
原创 C++进阶:笔记整理2
全局区:其中包括全局变量,静态变量栈区:局部变量存放区域堆区:由程序员自己创建出来的引用:notes:1.通俗的讲就是给变量起别名,相当于指针常量2.数据类型 &别名 = 原名int a=10;int &b=a;3.引用必须要初始化,即int &b;//错误4.引用在函数的传递时,可以做到地址传递的效果,实现值的交换myswap02(int &a,int &b){ int temp = a; a=b; b=temp;}
2020-10-24 23:39:25
173
原创 C++学习:笔记整理
1.水仙花数描述:千以内的三位数中,有个位的三次方+十位的三次方+百位的三次方=这个三位数的数就是水仙花数代码如下int i=100; do{ int a=i/100; int b=i%10; int c=(i/10)%10; int sum=a*a*a + b*b*b + c*c*c; if(i==sum){ cout << sum <<endl; } i++; } while(i<1000);2.break,continue
2020-10-22 14:45:04
231
原创 JS进阶:贪吃蛇游戏
对于贪吃蛇由食物,蛇,地图,游戏对象这个部分组成地图是最简单的,看个人如何设计它的样式与属性食物对象,设计样式以及位置,对于位置要做到位置随机,且在蛇头吃掉食物后食物会消失,出现在另一随机位置,代码如下: (function () { // 食物 var position = 'absolute'; //记录上一次创建的食物 var elements = []; function.
2020-10-08 21:25:59
339
原创 JS:模态框拖拽
要实现模态框的拖拽1.首先鼠标的拖拽时先按下鼠标且移动的时候才能实现拖拽2.获取鼠标按下时的下的坐标减去距离边框的距离为x,y3.获取鼠标移动时的x1,y1坐标4.用x1-x,y1-y可以知道模态框left,top代码如下:<body> <div class="login"> <div class="model"> <p>登录会员</p> <span>
2020-10-04 22:07:58
467
原创 JS:轮播图
首先对于轮播图要实现的功能,当点进页面时,轮播图会自动轮播,当鼠标进入轮播图时,轮播图会停止轮播此时的轮播图上的向左向右翻的的小标签会出现且页面的转换点也会出现。代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"
2020-10-02 15:25:22
138
原创 JS特效:两侧广告跟随
1.首先分析一下,两侧广告跟随,就是在鼠标向下滚动时,左右两幅图也跟着向下滚动相等的距离2.可以知道假设鼠标向下滚动了100px的话,那么两个图片也是向下滚动了100px,他的位置就是100加上图片距离父标签的距离3.现在还要实现一个图片的缓慢移动,就是设置一个计时器,分步骤将图片一步一步的走到最终的位置4.用当前屏幕被卷去的长度在加上距离上屏幕的高度就是图片应该到达的位置y,此时用y减去当前图片距离顶部的距离,就是图片到达y的距离sum。5.要实现缓慢移动的话可以将sum/10,图片一点一点的移动
2020-10-01 14:48:16
1459
原创 JS:定时跳跃
在网页中,经常出现,支付成功或者是提交成功后,会出现跳转页面,显示还剩下多少秒,到达零秒时会跳转到别的页面,如下图所示。 1. 首先写两个链接,一个是用来实现网页的倒计时效果,另一个是用来实现点击直接跳转 2. 再来写另一个网页作为跳转页面(如果是用来访问其他网页也可直接加上网页名称) 3. 直接跳转的这个链接是一个点击事件. 代码如下:<!DOCTYPE html><html lang="en"><head> <meta chars
2020-09-23 00:11:03
285
原创 JS:倒计时效果
在做倒计时前,先说一个方法setInterval(),这个方法可以重复调用一个函数,所以用这个方法可以实现倒计时的效果1.要做倒计时,首先是要获取当前时间,要知道最终时间是什么时候才可以倒计时2.用最终时间减去当前时间,可以知道还剩下多少时间到达目标时间3.用数学方法就可以得知倒计时的时分秒(具体看代码)4.要注意的是,因为setInterval()是在一秒后才会触发,所以一开始的时间并不是倒计时时间,所以可以将setInterval()这个方法先调用一次.实现效果如下代码如下<!D
2020-09-10 22:44:36
712
原创 JS:密码框效果
在输入密码时,将密码的长度设置为6-16,且在密码长度出现小于6或是大于16时,会出现提示,效果如下图 1. 此事件为失去焦点事件,当鼠标离开密码框且点击旁边就会触发事件 2. 输入密码会出现提示,事件发生与密码的长度有关 3. 根据长度再来判断该提示的消息与效果. 代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta na
2020-09-08 16:18:23
2391
原创 JS:dom基本操作与用法
元素的获取 1. document.getElementById().根据id获取元素 2. document.getElementByTagName().根据标签名获取元素 3. document.getElementByName().根据name获取元素 4. document.querySelector().用于返回指定选择器的第一个元素 5. documen.querySelectorAll().用于返回指定选择器的所有元素 6. document.getElementByClassNa
2020-09-06 17:45:27
304
原创 算法:数组中相加为0的三元组
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)解集中不能包含重复的三元组。 本问题有多种解法,此处用ArrayList的方法 1. 首先要判断数组num是否为空 2. 将数组排序,(排序有多种方法) 3. 遍历数组,分析题目可知,三个数相加等于零,此时的数组num已经是排过序的,由小到大的顺序,所以第一个数字如果大于0的话,那么后面的数一定都大于0,所以此处可以加一
2020-09-06 17:08:11
1472
原创 JS中实现删除广告
关闭广告在网页中经常会出现广告,如下图1,点击×就可以实现将广告给删除,如图2此问题有多种解法,此处将在JS中实现此操作 1. 删除操作在×这个图片上实现的,所以在×这个地方安插点击事件 2. 当点击×之后当前的广告就会消失,则广告这个盒子的display为none,代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name
2020-09-06 14:29:14
3682
1
原创 算法:数组中出现一次的数字
数组中出现一次的数字一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。本题有多种解法,此处用hashMap的方法,方法步骤如下: 1. HashMap中的键存储数组array的数字,值存储array中的数值出现的个数 2. 遍历HashMap,找到Value值等于1的键,并将其储存在新数组temp中 3. 将数组temp里面的值赋值给num1,num2.其代码如下import java.util.Map;import java.util.HashMa
2020-09-06 14:04:39
1725
原创 数据库的基本操作语句
数据库定义语言创建数据库:create databse [数据库名];创建表:create table [表名] (列属性);显示数据库:show databases;显示表:show tables;删除数据库:drop database 数据库名;删除表:drop table 表名;数据库操纵语言数据库操纵语言主要分为,增删改三种.添加:insert into 【表名】(列名,列名,,,) value (值,值,,,);删除:delete from 【表名 】where 条件;修改:
2020-06-24 18:27:38
745
原创 KMP算法(Java)
简介 KMP算法是一种字符串匹配算法,相对于BF算法,KMP算法的效率更高,当BF算法中失配时,主串与模式串都会回溯,效率较低。KMP算法匹配失配时,只需要将模式串回溯到适当的位置。next数组当失配时,模式串会回溯到一定的位置,回溯的位置取决于next数组。next数组的代码public static int[] getNext(String p){ int[] ...
2020-03-15 14:39:59
505
原创 BF算法(Java)
BF算法(Java)算法思想:算法思想:从主串的第一个字符开始与模式串的第一个字符开始比较如果相同,主串与字串都开始比较下一个如果不相同模式串返回到最初的位置,主串返回到主串的位置减去模式串位置加一的位置依次类推,直到在主串中找到与模式串匹配的字符串。package String;public class Brute_Force { public static void ...
2020-03-12 19:31:13
361
原创 纸牌游戏
纸牌游戏问题:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;…再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?public class test02 { pu...
2020-03-11 19:57:39
1179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人