目录
一 、共享栈的基本概念
1.定义
2.特点
二、共享栈的表示
三、共享栈的基本操作
1.共享栈的初始化操作
2.共享栈的判空操作
3.共享栈的进栈操作
0号栈进栈
1号栈进栈
4.共享栈的出栈操作
0号栈出栈
1 号栈出栈
5.取栈顶元素
取0号栈栈顶元素
取1号栈栈顶元素
一 、共享栈的基本概念
1.定义
利用栈底位置的不变性,可让两个顺序栈共享一个一维数组,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延申。
2.特点
共享栈是为了更有效的利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢。其存储数据的时间复杂度均为O(1),对存取效率没有影响。
1.定义
利用栈底位置的不变性,可让两个顺序栈共享一个一维数组,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延申。
2.特点
共享栈是为了更有效的利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢。其存储数据的时间复杂度均为O(1),对存取效率没有影响。
二、共享栈的表示
typedef struct {
ElemType data[MaxSize];
int top0;
int top1;
}ShareStack;
三、共享栈的基本操作
栈空:两个栈的栈顶指针都指向栈顶元素,top0=-1时0号栈为空,top1=MaxSize时1号栈为空;
栈满:仅当两个栈顶指针(top1-top0=1)时,判断为栈满。
进栈:当0号栈进栈时,top0先加1,再赋值;1号栈进栈时,top1先减1,再赋值。
出栈:当0号栈出栈时,先赋值,top0再减1;1号栈出栈时,先赋值,top1再加1。
栈空:两个栈的栈顶指针都指向栈顶元素,top0=-1时0号栈为空,top1=MaxSize时1号栈为空;
栈满:仅当两个栈顶指针(top1-top0=1)时,判断为栈满。
进栈:当0号栈进栈时,top0先加1,再赋值;1号栈进栈时,top1先减1,再赋值。
出栈:当0号栈出栈时,先赋值,top0再减1;1号栈出栈时,先赋值,top1再加1。
1.共享栈的初始化操作
void InitShareStack(ShareStack* shstack)
{
shstack->top0 = -1; //初始化栈顶指针
shstack->top1 = MaxSize;
}
2.共享栈的判空操作
int EmptySharaStack(ShareStack shstack)
{
if (shstack.top0 == -1 && shstack.top1 == MaxSize) //两个栈都空时,返回1
{
return 2;
}
else if (shstack.top0 == -1) //0号栈为空,1号栈非空时,返回0
{
return 0;
}
else if (shstack.top1 == MaxSize) //1号栈为空,0号栈非空时,返回1
{
return 1;
}
return -1; //两个栈都非空时,返回-1
}
3.共享栈的进栈操作
0号栈进栈
bool PushTop0(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top0++; //0号栈顶指针先加1
shstack->data[shstack->top0] = e; //元素入栈
return true;
}
1号栈进栈
bool PushTop1(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top1--; //1号栈顶指针先减一
shstack->data[shstack->top1] = e; //元素入栈
return true;
}
4.共享栈的出栈操作
0号栈出栈
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //栈顶元素先出栈
shstack->top0--; //栈顶指针再减1
return true;
}
1 号栈出栈
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //栈顶元素先出栈
shstack->top1++; //栈顶指针再加1
return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
int EmptySharaStack(ShareStack shstack)
{
if (shstack.top0 == -1 && shstack.top1 == MaxSize) //两个栈都空时,返回1
{
return 2;
}
else if (shstack.top0 == -1) //0号栈为空,1号栈非空时,返回0
{
return 0;
}
else if (shstack.top1 == MaxSize) //1号栈为空,0号栈非空时,返回1
{
return 1;
}
return -1; //两个栈都非空时,返回-1
}
3.共享栈的进栈操作
0号栈进栈
bool PushTop0(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top0++; //0号栈顶指针先加1
shstack->data[shstack->top0] = e; //元素入栈
return true;
}
1号栈进栈
bool PushTop1(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top1--; //1号栈顶指针先减一
shstack->data[shstack->top1] = e; //元素入栈
return true;
}
4.共享栈的出栈操作
0号栈出栈
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //栈顶元素先出栈
shstack->top0--; //栈顶指针再减1
return true;
}
1 号栈出栈
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //栈顶元素先出栈
shstack->top1++; //栈顶指针再加1
return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
bool PushTop0(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top0++; //0号栈顶指针先加1
shstack->data[shstack->top0] = e; //元素入栈
return true;
}
1号栈进栈
bool PushTop1(ShareStack* shstack, ElemType e)
{
if ((shstack->top1 - shstack->top0) == 1) //栈满,报错
{
return false;
}
shstack->top1--; //1号栈顶指针先减一
shstack->data[shstack->top1] = e; //元素入栈
return true;
}
4.共享栈的出栈操作
0号栈出栈
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //栈顶元素先出栈
shstack->top0--; //栈顶指针再减1
return true;
}
1 号栈出栈
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //栈顶元素先出栈
shstack->top1++; //栈顶指针再加1
return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
0号栈出栈
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //栈顶元素先出栈
shstack->top0--; //栈顶指针再减1
return true;
}
1 号栈出栈
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //栈顶元素先出栈
shstack->top1++; //栈顶指针再加1
return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //栈顶元素先出栈
shstack->top1++; //栈顶指针再加1
return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
bool PopTop0(ShareStack* shstack, ElemType* e)
{
if (shstack->top0 == -1) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top0]; //取栈顶元素
return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{
if (shstack->top1 == MaxSize) //1号栈空,报错
{
return false;
}
*e = shstack->data[shstack->top1]; //取栈顶元素
return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
Human is the animal with ideal.
The purpose of his life is to realize the ideal.



