栈的基本操作

来源:互联网 发布:中国项目数据分析师 编辑:程序博客网 时间:2024/06/04 07:34

#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; //注意:地址指针相减,结果并不是地址差,而是实际元素的差值。
}

 

 

0 0
原创粉丝点击