一种栈的自动增长处理系统及方法技术方案

技术编号:33723544 阅读:16 留言:0更新日期:2022-06-08 21:16
本发明专利技术公开了一种栈的自动增长处理系统及方法,该方法首先建立一个通用栈的结构类;构建所述结构类的构造函数并新建第一数组,将第一数组的地址分别存入到第一个数组地址指针和最后一个数组地址指针中;当任意元素A入栈时,采用所述入栈函数push来计算当前栈尾元素在最后一个数组的位置的值来判断当前数组是否还存在剩余空间,如果有直接将元素A入栈,如果没有则建立第二数组存放入栈元素A;当数组(除了第一个数组)无存放任何栈元素时,采用出栈函数pop释放该数组,防止空间内存的占用和浪费。本发明专利技术公开的方法实现了数组的动态增长效果,即栈的自动增长功能,且提升了栈的存储效率,可广泛应用于量子网络与计算机领域。可广泛应用于量子网络与计算机领域。可广泛应用于量子网络与计算机领域。

【技术实现步骤摘要】
一种栈的自动增长处理系统及方法


[0001]本专利技术涉及量子网络与计算机中数据结构领域,尤其涉及一种栈的自动增长处理系统及方法。

技术介绍

[0002]目前栈的储存方式有两种,分为链栈和顺序栈。链栈是利用单链表的方式实现,因为链表是动态分配空间的,因此栈的存储容量可变,但是需要为每个栈元素分配额外的指针空间用来存放指针域,产生了结构性开销。而且,链栈查询指定位置的元素的时间复杂度为O(n)。顺序栈是利用数组的方式来实现,由于数组在初始化的时候需要声明长度,因此栈的存储容量固定,存在栈满溢出情况。利用数组来进行储存栈元素的时候,需要对数组进行扩缩容量,即假设原数组的长度为len,当内存不足时,需要新建一个大小为2*len的数组;当内存使用不到1/4时,新建一个大小为1/2*len的数组,将原来的数组复制到新数组中,释放原来数组的空间。该方法需要频繁申请新数组以及销毁原数组,而将原数组复制到新数组中,还需要经过O(n)时间,不仅在空间上浪费内存,而且在时间上的花费也不少,导致栈的存储效率低下。
[0003]因此,有待对量子网络与计算机现有技术的不足进行改进,提出一种解决栈的自动增长问题并且提升栈存储效率的方法。

技术实现思路

[0004]本专利技术的目的是为了克服已有技术的缺陷,为了解决栈的增长和存储效率的问题,提出了一种栈的自动增长处理系统及方法。
[0005]本专利技术方法通过下述技术方案实现的:
[0006]一种栈的自动增长处理系统,包括结构类建立模块、数组建立模块、出栈模块和入栈模块,其中:
[0007]所述结构类建立模块用于建立一个通用栈的结构类,并设置结构类的成员变量;
[0008]所述数组建立模块用于构建所述结构类的构造函数并新建第一数组;
[0009]所述入栈模块用于进行入栈操作,采用所述入栈函数push来计算当前栈尾元素在最后一个数组的位置的值index1;当所述index1的值不等于0时,则将所述元素A入栈,
[0010]当index1的值等于0,则通过数组建立模块建立第二数组;
[0011]所述出栈模块用于进行出栈操作,采用出栈函数pop来计算当前栈尾元素B在最后一个数组的位置的值Index2,当index2的值不等于1时,将所述栈元素B出栈;
[0012]当index2的值等于1时,将所述栈元素B出栈,释放最后一个数组地址*lastArray指向的数组并将*lastArray指向倒数第二个数组。
[0013]一种栈的自动增长处理方法,所述方法的具体步骤如下:
[0014]步骤1:建立一个通用栈的结构类,并设置结构类的成员变量;
[0015]所述成员变量包括存放栈元素的第一个数组地址指针*firstArray,存放栈元素
的最后一个数组地址指针*lastArray,每个数组的长度arrayLen,当前数组的个数arrayNum,当前栈元素的大小size;
[0016]步骤2:构建所述结构类的构造函数并新建第一数组,第一数组命名为newArray1,将第一数组的地址分别存入到第一个数组地址指针*firstArray和最后一个数组地址指针*lastArray中;
[0017]步骤3:为所述结构类构建一个入栈函数push与出栈函数pop;
[0018]步骤4:当任意元素A入栈时,采用所述入栈函数push来计算当前栈尾元素在最后一个数组的位置的值index1,计算公式为:
[0019]Index1=size%(arrayLen

1),
[0020]当所述index1的值不等于0时,则将所述元素A入栈,size值加1;
[0021]当index1的值等于0,则建立第二数组newArray2并跳转到步骤5;
[0022]步骤5:地址指针*lastArray移除当前指向的数组并指向第二数组地址,数组的个数arrayNum的值加1,size值加1,并将所述入栈元素A赋值给第二数组的第一个元素;
[0023]步骤6:当栈尾元素B出栈时,采用出栈函数pop来计算当前栈尾元素B在最后一个数组的位置的值Index2,计算公式为:
[0024]Index2=size%(arrayLen

1),
[0025]当index2的值不等于1时,将所述栈元素B出栈,size值减1;
[0026]当index2的值等于1时,将所述栈元素B出栈,释放最后一个数组地址*lastArray指向的数组并将*lastArray指向倒数第二个数组。
[0027]进一步地,步骤4中的元素入栈后的位置表示为:*item=newArray2[index]。
[0028]进一步地,所述结构体还包括查询函数findByRule、排序函数sortByRule和显示函数showAll。
[0029]进一步地,所述查询函数findByRule的查询步骤为:
[0030]步骤A:设定一个条件参数*rule,所述*rule是一个函数指针,所述*rule指向的函数为规则函数rule;
[0031]步骤B:设定一个currentArray循环数组,并将第一个数组的地址赋值给currentArray,即*currentArray=*firstArray;
[0032]步骤C:设定一个循环变量i=0,循环开始并判断i是否小于size;
[0033]若i的值大于或等于size的值时,则返回空值,循环结束;
[0034]若i的值小于size的值时,则判断当前的元素是否符合所述规则函数rule的规则,若符合,则返回当前元素;
[0035]若不符合,则判断当前的元素是否是当前数组中的最后一个栈元素;
[0036]若当前的元素是当前数组的最后一个栈元素,则改变当前循环的数组为下一个数组,循环继续;
[0037]若当前循环的元素不是当前数组的最后一个栈元素,循环继续;
[0038]判断当前循环的元素是否是当前数组中的最后一个栈元素的依据是:若i%(arrayLen

1)==arrayLen

2,则当前循环的元素是当前数组的最后一个栈元素;
[0039]步骤D:当i的值大于size的值时,则表示没有找到符合规则函数rule的规则的元素,返回空值,循环结束。
[0040]进一步地,所述排序函数sortByRule的排序步骤为:
[0041]步骤a:建立第三数组;
[0042]步骤b:遍历结构体的所有元素,并根据排序规则将栈元素依次插入到第三数组中;
[0043]步骤c:遍历结束后,第三数组的排序完成。
[0044]进一步地,所述第三数组的长度为当前栈的大小。
[0045]进一步地,所述排序规则包括升序排序和降序排序。
[0046]进一步地,所述显示函数showAll采用for循环语句对所述结构本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种栈的自动增长处理系统,其特征在于,包括结构类建立模块、数组建立模块、出栈模块和入栈模块,其中:所述结构类建立模块用于建立一个通用栈的结构类,并设置结构类的成员变量;所述数组建立模块用于构建所述结构类的构造函数并新建第一数组;所述入栈模块用于进行入栈操作,采用所述入栈函数push来计算当前栈尾元素在最后一个数组的位置的值index1;当所述index1的值不等于0时,则将任意入栈元素A入栈,当index1的值等于0,则通过数组建立模块建立第二数组;所述出栈模块用于进行出栈操作,采用出栈函数pop来计算当前栈尾元素B在最后一个数组的位置的值Index2,当index2的值不等于1时,则将当前栈尾元素B出栈;当index2的值等于1时,将所述当前栈尾元素B出栈,释放最后一个数组地址*lastArray指向的数组并将*lastArray指向倒数第二个数组。2.一种栈的自动增长处理方法,其特征在于,应用了如权利要求1所述的一种栈的自动增长处理系统,该方法步骤如下:步骤1:建立一个通用栈的结构类,并设置结构类的成员变量;所述成员变量包括存放栈元素的第一个数组地址指针*firstArray,存放栈元素的最后一个数组地址指针*lastArray,每个数组的长度arrayLen,当前数组的个数arrayNum,当前栈元素的大小size;步骤2:构建所述结构类的构造函数并新建第一数组,第一数组命名为newArray1,将第一数组的地址分别存入到第一个数组地址指针*firstArray和最后一个数组地址指针*lastArray中;步骤3:为所述结构类构建一个入栈函数push与出栈函数pop;步骤4:当任意元素A入栈时,采用所述入栈函数push来计算当前栈尾元素在最后一个数组的位置的值index1,计算公式为:Index1=size%(arrayLen

1),当所述index1的值不等于0时,则将所述元素A入栈,同时size值加1;当index1的值等于0,则建立第二数组newArray2并跳转到步骤5;步骤5:地址指针*lastArray移除当前指向的数组并指向第二数组地址,数组的个数arrayNum的值加1,size值加1,并将所述入栈元素A赋值给第二数组的第一个元素;步骤6:当栈尾元素B出栈时,采用出栈函数pop来计算当前栈尾元素B在最后一个数组的位置的值Index2,计算公式为:Index2=size%(arrayLen

1),当index2的值不等于1时,将所述栈尾元素B出栈,同时size值减1;当index2的值等于1时,将所述栈尾元素B出栈,释放最后一个数组地址*lastArray指向的数组并将*lastArray指向倒数...

【专利技术属性】
技术研发人员:郭邦红李记烽胡敏
申请(专利权)人:广东国腾量子科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1