【技术实现步骤摘要】
一种栈的自动增长处理系统及方法
[0001]本专利技术涉及量子网络与计算机中数据结构领域,尤其涉及一种栈的自动增长处理系统及方法。
技术介绍
[0002]目前栈的储存方式有两种,分为链栈和顺序栈。链栈是利用单链表的方式实现,因为链表是动态分配空间的,因此栈的存储容量可变,但是需要为每个栈元素分配额外的指针空间用来存放指针域,产生了结构性开销。而且,链栈查询指定位置的元素的时间复杂度为O(n)。顺序栈是利用数组的方式来实现,由于数组在初始化的时候需要声明长度,因此栈的存储容量固定,存在栈满溢出情况。利用数组来进行储存栈元素的时候,需要对数组进行扩缩容量,即假设原数组的长度为len,当内存不足时,需要新建一个大小为2*len的数组;当内存使用不到1/4时,新建一个大小为1/2*len的数组,将原来的数组复制到新数组中,释放原来数组的空间。该方法需要频繁申请新数组以及销毁原数组,而将原数组复制到新数组中,还需要经过O(n)时间,不仅在空间上浪费内存,而且在时间上的花费也不少,导致栈的存储效率低下。
[0003]因此,有待对量子网络与计算机现有技术的不足进行改进,提出一种解决栈的自动增长问题并且提升栈存储效率的方法。
技术实现思路
[0004]本专利技术的目的是为了克服已有技术的缺陷,为了解决栈的增长和存储效率的问题,提出了一种栈的自动增长处理系统及方法。
[0005]本专利技术方法通过下述技术方案实现的:
[0006]一种栈的自动增长处理系统,包括结构类建立模块、数组建立模块、出栈模 ...
【技术保护点】
【技术特征摘要】
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指向倒数...
【专利技术属性】
技术研发人员:郭邦红,李记烽,胡敏,
申请(专利权)人:广东国腾量子科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。