栈的基本操作

#include <stdio.h>
#include <stdlib.h>
#define stackmax 10000 //存储空间初始分配量
#define stacknum 10000 //存储空间分配增量
typedef int ElemType;
typedef struct
{
    ElemType *base;//栈底指针
    ElemType *top; //栈顶指针
    int stacksize;
}SqStack;

int InitStack(SqStack &s) // 构造一个空栈S
{
    s.base = (ElemType*) malloc (stackmax*sizeof(ElemType));
    if (! s.base)
        exit(0);                                        //存储分配失败
    s.top = s.base;//空栈条件
    s.stacksize = stackmax; //栈的存储空间初始分配量
    return 0;
}
int Push(SqStack &s , int e)// 插入元素e为新的栈顶元素(创建一个栈)
{
    if(s.top-s.base >= s.stacksize)// 当前存储空间已满,增加分配
    {
            s.base = (ElemType *)realloc(s.base,(s.stacksize+stacknum)*sizeof(ElemType));
            if (! s.base ) exit(0); // 存储分配失败
            s.top = s.base + s.stacksize;
            s.stacksize += stacknum;  //增加存储容量
    }
    *s.top++=e;
}
void putstack(SqStack &s)// 出栈
{
    while(s.top > s.base)
    {
        printf("%d", *(s.top-1));
        s.top--;
    }
}

int  Pop(SqStack &s, ElemType &e )//若栈不空,则删除S的栈顶元素,并用e返回其值,并返回OK,否则返回error  
{
    if(s.top == s.base)   return 0;
           e=*--s.top;
      return 1;
}

int GetTop(SqStack &s, ElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
{
    if(s.top == s.base)   return 0;
    e=*(s.top-1);
    return 1;
}

int StackEmpty(SqStack &s)//判断栈空,若栈为空栈,则返回TRUE,否则 返回FALSE
{
    if(s.top == s.base)
        return 1;
    else
        return 0;
}

int DestroyStack(SqStack &s)//销毁栈
{
  free(s.base);
  s.base=s.top=NULL;
  s.stacksize=0;
  return 1;
}


int ClearStack(SqStack &s)//清空栈
{
  s.top=s.base;
  return 1;
}


int StackLength(SqStack &s)//获取栈中已有数据的长度
{
  return s.top-s.base; //注意:地址指针相减,结果并不是地址差,而是实际元素的差值。
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值