顺序队列和循环队列的数组实现
队列介绍
1)队列是一个有序列表,可以用数组或是链表来实现。2)遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。
顺序队列
顺序队一般会设置两个指针进行管理:front指针指向队列的第一个元素,rear指针指向最后一个元素的下一个位置,初始值都是0。
每次在队尾插入一个元素是,rear增1;每次在队头删除一个元素时,front增1。当front=rear时,队列中没有任何元素,称为空队列。
顺序队列中的溢出现象:
“下溢”现象:当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。
“真上溢”现象:当队列满时,做进队运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。
“假上溢”现象:由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为”假上溢”现象。
顺序队列的缺陷:当rear增加到指向分配的连续空间之外时,队列无法再插入新元素,但这时往往还有大量可用空间未被占用,这些空间 ...
稀疏数组
参考视频:韩顺平老师的尚硅谷Java数据结构与java算法 https://www.bilibili.com/video/BV1E4411H73v
应用场景分析编写的五子棋程序中,有存盘退出和继续上盘的功能。
分析问题:
因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。
稀疏数组(SparseArray)基本介绍当一个数组中大部分元素为0,或者为同一个值时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:
记录数组一共有几行几列,有多少个不同的值
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
应用实例思路及实现
二维数组转稀疏数组的思路:
1.遍历原始的二维数组,得到有效数据的个数sum2.根据sum就可以创建稀疏数组sparseArr = int[sum+1] [3]3.将二维数组的有效数据存入到稀疏数组中
稀疏数组转原始的二维数组的思路:
1.先读取稀疏数组的第一行,根据第一行数据,创建原始的二维数组,比如上面的 chessArr2 = int[11] [11]2.再读取稀疏数组后几行的数据,并赋给原始的 ...
web安全
SQL注入技术
判断是字符型注入还是数字注入1、数字型注入当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。
测试步骤:
(1) 加单引号,URL:www.text.com/text.php?id=3’
对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异
如果满足以上三点,则可以判断该URL存在数字型注入。
2、字符型注入当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别 ...