栈的顺序储存结构与操作

一、栈的定义

栈是一种只能在一端(栈顶)进行操作的数据结构,具有后进先出的特点。

二、栈的顺序储存结构

1、基本结构

typedef struct SqStack
{
    SElemType data[MAXSIZE];
    int top;//栈顶下标,相当于栈顶指针,始终指向栈顶元素
}SqStack;

2、基本操作
进栈操作

int Push(SqStack *S,SElemType e)
{
    if(S->top==MAXSIZE-1)//栈满
        return 0;
    S->top++;//栈顶指针加一
    S->data[S->top]=e;//将新元素赋值给栈顶
    return 1;
}

出栈操作

int Pop(SqStack *S,SElemType *e)
{
    if(S->top==-1)//栈空
        return 0;
    *e=S->data[S->top];//将栈顶元素赋值给e
    S->top--;//栈顶指针减一
    return 1;
}

3、两栈共享空间
利用栈的数组结构时,虽然插入删除方便,但是我们却要先确定好数组储存空间,不够用了又得扩充容量,很麻烦,如果我们有两个相同类型的栈,我们可以将两个栈合并一起,形成共享空间,可以提高栈的利用率。
在这里插入图片描述
基本结构

typedef struct
{
   SElemType data[MAXSIZE];
   int top1;//栈1栈顶指针
   int top2;//栈2栈顶指针
}SqDoubleStack;

特点:(1)一个栈(记为栈1)的栈底作为首段,下标为0,另一个栈(记为栈2)的栈底作为尾端。
(2)当top1=-1时栈1为空,top2=n-1时栈二为空,top1+1=top2时,栈满。

基本操作
(1)push

int push(SqDoubleStack *S,SElemType e,int stackNumber)
{
    if(S->top1+1==S->top2)//判断是否栈满
        return 0;
    if(stackNumber==1)//栈1进栈
        S->data[++S->top1]=e;
    else if(stackNumber==2)//栈2进栈
        S->data[--S->top2]=e;
    return 1;
}

(2)pop

int Pop(SqDoubleStack *S,SElemType *e,int stackNumber)
{
    if(stackNumber==1)
    {
        if(S->top1==-1)
            return 0;
        else
            *e=S->data[S->top1--];
    }
    if(stackNumber==2)
    {
        if(S->top2==MAXSIZE-1)
            return 0;
        else
            *e=S->data[S->top2++];
    }
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值