栈的基本操作

初始化一个栈:InitStack

销毁一个栈:DestroyStack

清空一个栈:ClearStack

判断一个栈是否为空:StackIsEmpty

返回栈中元素个数,即栈的长度:StackLength

入栈,把一个元素加入到栈中:Push 

出栈,把栈顶元素给干掉:Pop 

返回栈顶元素,但不出栈:GetTop

一,顺序栈的实现:

顺序栈的定义:

# define MaxSize 10         //定义栈中元素的最大个数
typedef struct{
    ElemType data[MaxSize];    //静态数组存放栈中元素 
    int top;                   //栈顶指针
}SqStack;

初始化:

void InitStack(SqStack &S){
    S.top = -1;             //初始化栈顶指针
}

栈的判空操作:

//栈的判空操作
bool StackEmpty(SqStack S){
    if(S.top == -1){
        return true;        //栈空
    }
    else{
        return false;       //不为空
    }
}

入栈:

//新元素入栈
bool Push(SqStack &S, ElemType x){
    if(S.top == MaxSize-1){     //表示栈满了
        return false;
    }
    S.top = S.top + 1;          //指针先加一
    S.data[S.top] = x;          //新元素入栈
    return true;
}

出栈:

//出栈操作
bool Pop(SqStack &S, ElemType &x){
    if(S.top == -1){        //栈空,报错
        return false;
    }
    x = S.data[S.top];      //栈顶元素先出栈
    S.top = S.top - 1;      //指针再减1
    return true;
}

读取栈顶元素:

//读取栈顶元素
bool GetTop(SqStack &S, ElemType &x){
    if(S.top == -1){        //栈空,报错
        return false;
    }
    x = S.data[S.top];      //记录栈顶元素
    return true;
}

初始时设置:s.top=-1(不唯一)

栈顶元素:s.data[s.top];

栈空条件:s.top=-1

栈满条件:s.top=Maxsize-1

栈长:s.top+1

二,链栈的实现:

typedef struct Linknode{
    ElemType data;      //数据域
    struct Linknode *next;      //指针域
}LiStack;                   //栈类型定义

采用链式存储,便于结点的插入和删除。链栈的操作与链表类似。

对于链栈的基本操作来说,和单链表的插入删除很类似,所以就不在讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值