栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况。若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出、有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术。
从网站建设到定制行业解决方案,为提供网站建设、成都网站建设服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。成都创新互联公司将不断加快创新步伐,提供优质的建站服务。在顺序栈的共享技术中,最常用的是两个栈的共享技术,即双端栈。它主要利用了栈的栈底位置不变,而栈顶位置动态变化的特性。
实现代码如下:
#include
using namespace std;
#define TRUE 1
#define FALSE 0
#define M 100
//双端顺序栈的存储结构
typedef struct
{
int Stack[M];//Stack[M]为栈区
int top[2];//top[0]和top[1]分别为两个栈顶指示器
}DqStack;
//初始化双端顺序栈
void InitStack(DqStack *S)
{
S->top[0] = -1;
S->top[1] = M;
}
//双端顺序栈进栈操作
int Push(DqStack *S,int x,int i)//把数据元素x压入i号堆栈
{
if (S->top[0]+1 == S->top[1])//栈已满
{
return FALSE;
}
switch (i)
{
case 0: //0号栈
S->top[0]++;
S->Stack[S->top[0]] = x;
break;
case 1: //1号栈
S->top[1]--;
S->Stack[S->top[1]] = x;
break;
default: //参数错误
return FALSE;
break;
}
return TRUE;
}
//双端顺序栈出栈操作
int Pop(DqStack *S, int *x, int i)//从i号堆栈中弹出栈顶元素并送到x中
{
switch (i)
{
case 0: //0号栈出栈
if (S->top[0] ==-1)
{
return FALSE;
}
*x=S->Stack[S->top[0]] ;
S->top[0]--;
break;
case 1: //1号栈出栈
if (S->top[1] == M)
{
return FALSE;
}
*x = S->Stack[S->top[1]];
S->top[1]++;
break;
default:
return FALSE;
break;
}
return TRUE;
}
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款