温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

多栈共享技术,双端栈的初始化、进栈、出栈操作

发布时间:2020-04-28 10:38:00 来源:网络 阅读:1131 作者:岩枭 栏目:编程语言

    栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况。若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出、有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术。

    在顺序栈的共享技术中,最常用的是两个栈的共享技术,即双端栈。它主要利用了栈的栈底位置不变,而栈顶位置动态变化的特性。

实现代码如下:

#include<iostream>

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;

}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI