共享顺序栈的实现

#include<iostream.h>
#include<stdlib.h>     //exit的原型定义
#define STACK_INIT_SIZE 8
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
typedef char SElemType;
typedef struct
{
    SElemType *base;       //栈底指针
    SElemType *top;        //栈顶指针
    int stacksize;       // 当前已分配的栈空间
}SqStack;

void InitStack(SqStack &S)
{
    //构造一个空的顺序栈 S
    S.base=new SElemType[STACK_INIT_SIZE];
    if(!S.base)
        exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}

Status StackEmpty(SqStack S)
{
    //判栈空
    if(S.top==S.base)
        return OK;       //空则返回1
    else
        return ERROR;       //不空返回0
}

Status StackFull(SqStack S)
{
    //判栈满
    if(S.top-S.base>=S.stacksize)
        return OK;            //判栈满,满则返回1
    else
        return ERROR;           //否则返回0
}

Status push(SqStack &S,SElemType x)
{
    //插入元素x为新的栈顶元素
    if(StackFull(S))
        return ERROR;
    *S.top++=x;
    return OK;
}

Status pop(SqStack &S,SElemType &e)
{
    //若栈空返回0,否则栈顶元素退出到e并返回1
    if(StackEmpty(S))
        return ERROR;
    --(S.top);
    e=*(S.top);
    return OK;
}

void StackTravers(SqStack S)
{
    SqStack p=S;
    while(p.top>S.base)
        cout<<*--p.top<<"  ";
    cout<<endl;
}

void GetTop(SqStack S,SElemType &e)
{
    if(StackEmpty(S))
        cout<<"stack is empty!\n";
    e=*(S.top-1);
}


void main()
{
    SqStack S;
    SElemType e;
    InitStack(S);
    for(char ch='a';ch<='g';ch++)
        push(S,ch);
    StackTravers(S);
    cout<<"input Element e=";
    cin>>e;
    if(!push(S,e))
        cout<<"Stack Full!\n";
    StackTravers(S);

    GetTop(S,e);
    cout<<e<<endl;
    StackTravers(S);
}

 

转载于:https://www.cnblogs.com/yanyanwen/archive/2013/04/23/3039019.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值