共享栈

原创 2018年04月15日 11:21:04
1.定义

    所谓共享栈就是利用一个数组实现两个栈. 先来看一下共享栈的数据结构

typedef struct SharedStack
{
    int top1;
    int top2;
    SeqStackType* data;
}SharedStack;
2. 初始化
void SharedStackInit(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    stack -> top1 = 0;
    stack -> top2 = MAXSIZE;
    stack -> data = (SeqStackType*)malloc(sizeof(MAXSIZE));
    if(stack -> data == NULL)
    {
        return;//内存申请失败
    }
}

这里写图片描述

3. 第一个栈入栈
void SharedStackPush1(SharedStack* stack, SeqStackType value)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == stack -> top2)
    {
        return;//共享栈已满
    }
    stack -> data[stack -> top1++] = value;
}

这里写图片描述

4. 第二个栈入栈
void SharedStackPush2(SharedStack* stack, SeqStackType value)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == stack -> top2)
    {
        return;//共享栈已满
    }
    stack -> data[--stack -> top2] = value;
}

这里写图片描述

5. 第一个栈出栈
void SharedStackPop1(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == 0)
    {
        return;//栈空
    }
    stack -> top1--;
}

这里写图片描述

6. 第二个栈出栈
void SharedStackPop2(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top2 == MAXSIZE)
    {
        return;//栈空
    }
    stack -> top2++;
}

这里写图片描述

7. 取第一个栈的栈顶元素
int SharedStackTop1(SharedStack* stack, SeqStackType* value)
{
    if(stack == NULL || value == NULL)
    {
        return 0;//非法输入
    }
    *value = stack -> data[stack -> top1 -1];
    return 1;
}

这里写图片描述

8. 取第二个栈的栈顶元素
int SharedStackTop2(SharedStack* stack, SeqStackType* value)
{
    if(stack == NULL || value == NULL)
    {
        return 0;
    }
    *value = stack -> data[stack -> top2];
    return 1;
}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41027326/article/details/79947677

由http暗藏通道看网络安全

由http暗藏通道看网络安全 内容:什么是http暗藏通道什么是HttptunnelHttptunnel带来的安全问题一些解决思路总结参考资料关于作者宫一鸣 (yiming@securit...
  • sonicdater
  • sonicdater
  • 2002-03-13 08:58:00
  • 1090

共享栈的实现(C++版)

前言 栈的应用
  • tongxinhaonan
  • tongxinhaonan
  • 2014-05-22 10:45:23
  • 1118

数据结构之---C语言实现共享栈

数据结构之---C语言实现共享栈
  • u012965373
  • u012965373
  • 2015-06-05 11:28:39
  • 1296

关于两个栈的共享空间问题理解。

为什么要共享空间?谁用谁的多好呀!但是呢,我们都知道使用过程中我们给每个栈分配足够的空间是不太现实的,使用栈的时候,我们也不能保证栈有足够的空间,另外,栈是一个动态的存储结构,各个栈的实际大小在使用的...
  • ganggang112800
  • ganggang112800
  • 2011-11-26 20:58:11
  • 4239

数据结构--栈--两栈共享空间

如何将两个栈使用同一个内存空间 将一个栈的栈底为数据的终端,即下标为0 另一个栈的栈底为数据的末端,即下标为n-1 如下图: /*两栈共享空间结构*/ t...
  • qq_33531400
  • qq_33531400
  • 2016-11-28 20:59:32
  • 414

两栈共享空间(java实现)

如果我们有两个相同类型的栈,我们为他们各自开辟了数组空间,极有可能第一个栈已经满了,再进栈就溢出了,而另一个栈还有很多存储空间空闲。这时,我们可以充分利用顺序栈的单向延伸的特性,使用一个数组来存储两个...
  • u012515904
  • u012515904
  • 2015-05-07 10:06:57
  • 833

两栈共享空间 C语言实现

/* 两栈共享空间 作者:S_hmily 日期:2011年8月31日 编译环境:VC6.0++ 栈1空 S->top1 == -1 栈2空 S->top2 == MaxSize...
  • zhuyi2654715
  • zhuyi2654715
  • 2011-08-31 15:29:52
  • 3387

数据结构与算法之——两栈共享存储空间

其实栈的顺序存储很方便,因为它只在表尾进行操作,不存在普通线性表插入与删除还需要移动元素的情况。同样它也有普通线性表的缺陷,即必须确定数量。然而对于两个相同类型的栈,却可以做到最大限度地利用其开辟的存...
  • mylovepan
  • mylovepan
  • 2014-02-12 09:21:13
  • 4070

两栈共享空间的顺序栈C++实现

程序中如果需要同时使用具有相同数据类型的两个栈的时候,可以采用一个数组,让一个栈的栈底在该数组的起始端,另一个栈的栈底在数组的结尾,有利于节省空间。 /***********************...
  • xiaolei09bupt
  • xiaolei09bupt
  • 2015-03-22 14:54:31
  • 545

顺序栈的实现和两栈共享空间

顺序栈的实现和两栈共享空间   一.顺序栈的实现             栈(stack)是限定仅在表尾进行插入或删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一...
  • zxf13598202302
  • zxf13598202302
  • 2015-11-07 20:37:04
  • 2216
收藏助手
不良信息举报
您举报文章:共享栈
举报原因:
原因补充:

(最多只允许输入30个字)