两栈共享存储空间-创新互联

两栈共享空间就是指,当其中一个栈的空间用光时,可以借用另外一个栈的空间,这样就大大提高了空间的利用率。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比太谷网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式太谷网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖太谷地区。费用合理售后完善,10多年实体公司更值得信赖。

  一个数组有两个端点,一个起始端点,另一个是数组末尾。而两个栈有两个栈底,我们就将其中一个栈底作为数组的起始端点,另一个栈底作为数组的末端。两个栈如果增加元素,就向中间延伸。

  那么,我们该如何操作这个共享空间的栈呢?其中一个栈的top指针指向数组0处,另一个栈的top指针指向数组(n-1)处,n为数组长度。当top1 = -1, top2 = n时,意味着栈1和栈2都为空栈。当有数据存放在栈1中时,那么top1++,如果有元素存放在栈2中,则top2--。那么如何开辟两栈共享空间这样的结构呢?很明显需要一个数组,还需要两个指针,一个指向数组的顶端作为栈1的栈顶指针,另一个指向数组的底端作为栈2的栈顶指针。代码如下:

typedef struct{
    
    SElemType data[MAXSIZE];
    int top1;     //栈1的栈顶指针 
    int top2;     //栈2的栈顶指针
}SqDoubleStack;

  那么如何实现元素的插入呢?首先你得确定插入的是栈1还是栈2,所以需要一个判断栈1还是栈2的变量stackNumber。当实现元素的插入时,首先得判断栈是否为满栈,如果满栈,则插入失败,因为已经没有空间放入新的元素了。什么时候是满栈呢?当指针top1和指针top2相差为1时,也就是两个指针见面时,此时为满栈。代码如下:

top1 + 1 == top2;

如果不是满栈,则可以继续插入元素,此时,就是判断是放入栈1还是栈2。如果是放入栈1,则

s->data[++s->top1] = e;

如果是放入栈2,则

s->data[--S->top2] = e;

完整代码如下:

Status Push ( SqDoubleStack *S, ElemType e, int stackNumber )
{
    if ( top1 + 1 == top2 )
        return ERROR;
    
    if ( stackNumber == 1 )
        S->data[++S->top1] = e;
    if ( stackNumber == 2 )
        S->data[--S->top2] = e;
        
    return OK;

}

  同样的,元素的删除也就是元素的弹出(POP)操作,跟元素的弹入(PUSH)类似。想要删除元素,首先要判断是栈1的元素还是栈2的元素,如果是栈1的元素,接着要判断栈1是否为空栈,如果为空栈,则删除失败,如果不为空栈,则

--S->top1;

如果是栈2的元素,要判断栈2是否为空栈,如果不为空栈,则

++S->top2;

完整代码如下:

Status ( SqDoubleStack *S, ElemType *e, int stackNumber )
{
    if ( stackNumber == 1 ){
    
        if ( S->top1 == -1 )
            return ERROR;
        
        *e = S->data[S->top1--];
        
    }
    
    if ( stackNumber == 2 ){
    
        if ( S->top2 == MAXSIZE )
            return ERROR;
            
        *e = S->data[S->top2++];
  
    }

    return OK;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享文章:两栈共享存储空间-创新互联
当前路径:https://www.cdcxhl.com/article36/pejsg.html

成都网站建设公司_创新互联,为您提供网站营销网站导航外贸建站网站设计公司网站制作域名注册

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司