一、栈的概念

栈:一种只允许在一端进行插入和删除的线性表,首先栈是一种线性表,但是这种线性表只能在一端进行删除和插入。

栈顶:允许插入删除一端  栈底:不允许插入删除。空栈不包括认识元素

操作特性:LIFO(后进先出)

n个元素进栈,出栈的数列顺序个数公式:

二、栈的基本操作:

初始化栈:initstack(&s)

判断栈空:Stackempty(s)

进栈:push(&s,key)

出栈:pop(&s,&e)删除并且返回栈顶元素

读取栈顶元素:Getpop:Gettop(S,&e);

销毁栈:destoryStack(&s) 销毁栈

三、栈的类别:存储方式不同:顺序栈 链表栈

顺序栈:用连续空间存储栈底到栈顶的元素,并且附加一个栈顶指针

typedef struct {
    Elemtype data[maxsize];
    int top;
}Sqtack;

栈顶指针为 S.top  初始化设置为-1(当前的存储位置) 栈顶元素:s.tada[S.top]

进栈操作:栈不满,栈顶指针加1,添加元素到栈顶

出栈操作:栈非空,先取值,在把栈顶元素减1

栈空条件:s.top==-1 栈满条件:s.top=maxsize-1 栈长:s.top+1

区别:初始化 s.top=0;(top指向下一个存储位置)

基本操作实现:

1.初始化栈:初始化栈顶指针

        

void intiStack(&s){
    s.top=-1;
}

2.判断空:判断头指针是否为-1

bool EmptyStack(SqStack &s){
    if(s.top==-1)
        return ture;  //空
    else
        return false;
}

3.进栈:判断栈不满,指针+1 ,赋值

bool push(SqStack &s,int e){
    if(s.top!=Maxsize-1)
        s.top=s.top+1;
        s.data[top]=e;
        return true; 
    return false;
}

4.出栈:栈不空,赋值,指针-1

bool pop(SqStack &s,int &key){
    if(s.top!=-1)
        key=s.data[top];
        s.top=s.top-1;
        return true;
    return false;
}

5.读取栈顶元素 不空读取

bool Gettop(Sqstack s,int &key){
    if(s.top!=-1)
        key=data[top];
        return true;
    return false;
}

共享栈 

定义:利用栈底位置相对不变,一个数组分为两个栈,两个栈从栈底分别向中间拓展

初始化:top0=0 top1=maxsize-1

添加元素:top0端+1,在赋值,top1端-1,在赋值

栈满条件:top1-top0=1  

存取时间复杂度 o(1)

链式存储

优点:便于多个栈共享存储空间,不存在溢满

操作都是在没有头结点的链表进行Lhead指向栈顶元素

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值