(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202111673479.1
(22)申请日 2021.12.31
(71)申请人 广东国腾量子科技有限公司
地址 526238 广东省肇庆市高新区北江大
道18号富民大厦1319室
(72)发明人 郭邦红 李记烽 胡敏
(51)Int.Cl.
G06F 9/50(2006.01)
G06F 16/2458(2019.01)
G06N 10/00(2022.01)
(54)发明名称
一种栈的自动增长处 理系统及方法
(57)摘要
本发明公开了一种栈的自动增长处理系统
及方法, 该方法首先建立一个通用栈的结构类;
构建所述结构类的构造函数并新 建第一数组, 将
第一数组的地址分别存入到第一个数组地址指
针和最后一个数组地址指针中; 当任意元素A入
栈时, 采用所述入栈函数push来计算 当前栈尾元
素在最后一个数组的位置的值来判断当前数组
是否还存在剩余空间, 如果有 直接将元素A入栈,
如果没有则建立第二数组存放入栈元素A; 当数
组(除了第一个数组)无存放任何栈元素时, 采用
出栈函数pop释放该数组, 防止空间内存的占用
和浪费。 本发 明公开的方法实现了数组的动态增
长效果, 即栈的自动增长功能, 且提升了栈的存
储效率, 可广泛应用于量子网络与计算机领域。
权利要求书2页 说明书6页 附图3页
CN 114595056 A
2022.06.07
CN 114595056 A
1.一种栈的自动增长处理系统, 其特征在于, 包括结构类建立模块、 数组建立模块、 出
栈模块和入 栈模块, 其中:
所述结构类建立模块用于建立 一个通用栈的结构类, 并设置结构类的成员变量;
所述数组建立模块用于构建所述结构类的构造函数并新建第一数组;
所述入栈模块用于进行入栈操作, 采用所述入栈函数push来计算当前栈尾元素在最后
一个数组的位置的值index1; 当所述index1的值不等于0时, 则将任意入栈元素A入栈, 当
index1的值 等于0, 则通过 数组建立模块建立第二数组;
所述出栈模块用于进行出栈操作, 采用出栈函数pop来计算当前栈尾元素B在最后一个
数组的位置的值 Index2, 当i ndex2的值 不等于1时, 则将当前栈尾元 素B出栈;
当index2的值等于1时, 将所述当前栈尾元素B出栈, 释放最后一个数组地址*
lastArray指向的数组并将*last Array指向倒数第二个数组。
2.一种栈的自动增长处理方法, 其特征在于, 应用了如权利要求1所述的一种 栈的自动
增长处理系统, 该 方法步骤如下:
步骤1: 建立 一个通用栈的结构类, 并设置结构类的成员变量;
所述成员变量包括存放栈元素的第一个数组地址指针*firstArray, 存放栈元素的最
后一个数组地址指针*lastArray, 每个数组的长度arrayLen, 当前数组的个数arrayNum, 当
前栈元素的大小size;
步骤2: 构建所述结构类的构造函数并新建第一数组, 第一数组命名为newArray1, 将第
一数组的地址分别存入到第一个数组地址指针*firstArray和最后一个数组地址指针*
lastArray中;
步骤3: 为所述结构类构建一个入 栈函数push与出栈函数pop;
步骤4: 当任意元素A入栈时, 采用所述入栈函数push来计算当前栈尾元素在最后一个
数组的位置的值 index1, 计算公式为:
Index1=size%(ar rayLen‑1),
当所述index1的值 不等于0时, 则将所述元 素A入栈, 同时size值加1;
当index1的值 等于0, 则建立第二数组newA rray2并跳转到步骤5;
步骤5: 地址指针*lastArray移除当前指向的数组并指向第二数组地址, 数组的个数
arrayNum的值加1, size值加1, 并将所述入 栈元素A赋值给第二数组的第一个元 素;
步骤6: 当栈尾元素B出栈时, 采用出栈函数pop来计算当前栈尾元素B在最后一个数组
的位置的值 Index2, 计算公式为:
Index2=size%(ar rayLen‑1),
当index2的值 不等于1时, 将所述栈尾元 素B出栈, 同时size值减1;
当index2的值等于1时, 将所述栈尾元素B出栈, 释放最后一个数组地址*lastArray指
向的数组并将*last Array指向倒数第二个数组。
3.根据权利要求2所述的一种栈的自动增长处理方法, 其特征在于, 步骤2中新建第一
数组时, 数组长度ar rayLen为len, 初始数组个数ar rayNum为1, 当前栈元 素的大小size为0 。
4.根据权利要求3所述的一种栈的自动增长处理方法, 其特征在于, 所述入栈函数push
包括一个栈元 素参数, 所述 参数的命名为*item, 类型为指针。
5.根据权利要求4所述的一种栈的自动增长处理方法, 其特征在于, 步骤4中的元素入权 利 要 求 书 1/2 页
2
CN 114595056 A
2栈后的位置表示 为: *item= newArray2[index]。
6.根据权利要求2所述的一种 栈的自动增长处理方法, 其特征在于, 所述结构体还包括
查询函数fi ndByRule、 排序函数sor tByRule和显示 函数showAll。
7.根据权利要求书6所述的一种栈的自动增长处理方法, 其特征在于, 所述查询函数
findByRule的查询步骤为:
步骤A: 设定一个条件参数*rule, 所述*rule是一个函数指针, 所述*rule指向的函数为
规则函数rule;
步骤B: 设定一个currentArray循环数组, 并将第一个数组的地址赋值给
currentArray, 即*currentArray=*first Array;
步骤C: 设定一个 循环变量 i=0, 循环开始并判断i是否小于size;
若i的值大于或等于size的值时, 则返回空值, 循环结束;
若i的值小于size的值时, 则判断当前的元素是否符合所述规则函数rule的规则, 若符
合, 则返回当前 元素;
若不符合, 则判断当前的元 素是否是当前 数组中的最后一个栈元 素;
若当前的元素是当前数组的最后一个栈元素, 则改变当前循环的数组为下一个数组,
循环继续;
若当前循环的元 素不是当前 数组的最后一个栈元 素, 循环继续;
判断当前循环的元素是否是当前数组中的最后一个栈元素的依据是: 若i%
(arrayLen‑1)==arrayLen‑2, 则当前循环的元 素是当前数组的最后一个栈元 素;
步骤D: 当i的值大于size的值时, 则表示没有找到符合规则函数rule的规则的元素, 返
回空值, 循环结束。
8.根据权利要求书6所述的一种栈的自动增长处理方法, 其特征在于, 所述排序函数
sortByRule的排序步骤为:
步骤a: 建立第三数组;
步骤b: 遍历结构体的所有元 素, 并根据排序规则将栈元 素依次插 入到第三数组中;
步骤c: 遍历结束后, 第三数组的排序完成。
9.根据权利要求书8所述的一种 栈的自动增长处理方法, 其特征在于, 所述第 三数组的
长度为当前栈的大小;
所述排序规则包括升序排序和降序排序。
10.根据权利要求书6所述的一种栈的自动增长处理方法, 其特征在于, 所述显示函数
showAll采用for循环语句对所述结构类的所有栈元 素进行遍历。权 利 要 求 书 2/2 页
3
CN 114595056 A
3
专利 一种栈的自动增长处理系统及方法
文档预览
中文文档
12 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共12页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-19 02:00:19上传分享