数据结构:栈的顺序存储

top==-1 --> 堆栈空

top==0  -->下标为0的地方有一个元素(从0到Maxsize-1)

静态栈:先加后压 先抬后减

#define Maxsize 100
typedef struct stack_
{
    int data[Maxsize];//数组
    int top;//栈顶元素在数组中的位置
}*Stack;//结构体指针

入栈:(先判断堆栈是否已满)

void push(Stack ptrs,int item)//入栈
{
    if(ptrs->top==Maxsize-1)  cout<<"堆栈满";//0到Maxsize-1
    else
        ptrs->data[++(ptrs->top)]=item;//先top++,再压入元素
}

出栈:(先判断堆栈是否为空)

int pop(Stack ptrs)//出栈
{
    if(ptrs->top==-1)
    {
        cout<<"栈空";
        return -1;
    }
    else
      return ptrs->data[(ptrs->top)--];//先抬出元素,后top--
}

题:请用一个数组实现两个堆栈,要求最大地利用数组空间,使数组只要有空间入栈操作就可以成功。

解法:使两个栈分别从数组的两头开始向中间生长,当两个栈的栈顶指针相遇时,表示两个栈都满了。

#define Maxsize 100
struct stack_
{
    int data[Maxsize];
    int top1;//堆栈1的栈顶指针
    int top2;//堆栈2的栈顶指针
}Stack;
S.top1=-1;//左边最小为0
S.top2=Maxsize;//右边最大为Maxsize-1
void push(struct stack_ *ptrs,int item,int tag)//tag作为区分两个堆栈的标志,取值为1和2
{
    if(ptrs->top2 - ptrs->top1==1)//堆栈满
        cout<<"栈满";
    if(tag==1)//对第一个堆栈操作
        ptrs->data[++(ptrs->top1)]=item;
    else//对第二个堆栈操作
        ptrs->data[--(ptrs->top2)]=item;
}
int pop(struct stack_* ptrs,int tag)
{
    if(tag==1)
    {
        if(ptrs->top1==-1) cout<<"堆栈1空"<<endl;
        else
            return ptrs->data[(ptrs->top1)--];
    }
    else
    {
        if(ptrs->top2==Maxsize) cout<<"堆栈2空"<<endl;
        else
            return ptrs->data[(ptrs->top2)++];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值