[算法设计题] 双栈结构

双栈结构

要求

要求编写双栈初始化,判断栈空、栈满、进栈和出栈
已知的双栈结构:

typedef struct
{
	int top[2], bot[2]; //栈顶和栈底指针
	SElemType *V;		//栈数组
	int m;				//栈最大可容纳元素
} DblStack;

算法思想

  1. 两栈共享向量空间,把栈的栈底设置在左右两端,初始时,左栈的栈底等于栈顶等于-1;右栈的栈底等于栈顶等于m;
  2. 两栈的栈顶相邻时栈满(右栈顶-左栈顶 = 1)
  3. 两栈顶相向增长,栈顶指针指向栈顶元素。
  4. 左栈执行进栈操作时候,栈顶元素(右移)+1;出栈时栈顶元素(左移)-1;
  5. 右栈执行进栈操作时候,栈顶元素(左移)-1;出栈时栈顶元素(右移)+1;

算法实现

  1. 初始化双栈
    Status InitStack(DblStack &S, int m){
    	S.V = new SElemType[m];//初始化数组空间
    	if(!S.V) return Error;
    	S.bot[0] = -1;//左栈的栈底指针
    	S.top[0] = -1;//左栈的栈顶指针
    	S.bot[1] = m;//右栈的栈底指针
    	S.top[1] = m;//右栈的栈顶指针
    	return OK;
    }
    
  2. 判断栈空
    int IsEmpty(DblStack S){
    	return S.top[i] == S.bot[i];
    }
    
  3. 判断栈满
    int IsFull(DblStack S)	{
    	if (S.top[1] - top[0] == 1) return 1;
    	else return 0;
    }
    
  4. 指定栈插入元素
    Status DblPush(DblStack S, int i, SElemType x)	{
    	//判断栈满
    	if (S.top[1] - top[0] == 1) return ERROR;
    	if (i == 0) S.V[++S.top[0]] = x;
    	else S.V[--S.top[1]] = x;
    	return OK;
    }
    
  5. 指定栈删除元素
    Status DblPop(DblStack &S, int i, SElemType &x)	{
    	//判断栈空
    	if (S.top[i] == S.bot[i]) return ERROR;
    	if (i == 0) x = S.V[S.top[0]--];
    	else x = S.V[S.top[1]++];
    	return OK;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源同学r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值