顺序栈的基本操作实现

Posted im.lhc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序栈的基本操作实现相关的知识,希望对你有一定的参考价值。

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TRUE   1
#define FALSE  0
#define OK     1
#define ERROR  0
#define IBFEASIBLE  -1
#define OVERFLOW    -2 

//#define MAXLEN  20
//#define MAXSIZE 20

typedef int Status;
typedef int ElemType; /* 元素类型为int类型*/

//顺序栈类型 
typedef struct{
    ElemType *elem;  //存储空间的基址 
    ElemType *top;        //栈顶位标 
    int size;        //当前分配的存储容量 
    int increment;    //扩容 
} SqStack;            //顺序栈 //顺序栈的基本接口实现
 

//1.初始化顺序栈 
Status InitStack(SqStack &S,int size,int inc){
    S.elem=(ElemType*)malloc(size*sizeof(ElemType));
      if(S.elem==NULL)
      return OVERFLOW;
      S.top=S.elem;            //置S为空栈
      S.size=size;        //初始容量值
      S.increment=inc;    //初始增量值
      return OK;
}

//2.销毁顺序栈 
Status DestroyStack(SqStack &S){
    free(S.elem);
    S.elem=NULL;
    S.top=NULL;
    S.size=0;
    return OK;
}

//3.判断栈是否为空,为空返回 
Status StackEmpty(SqStack &S){
    if(S.top==S.elem){
        return TRUE;
    }else{
        return FALSE;
    }
} 

//4.清空栈S
Status ClearStack(SqStack &S){
    S.top=S.elem;
    return OK;
} 

//5.入栈操作S
 Status Push(SqStack &S,ElemType e){
    ElemType *newbase;  //创建一个新的指针
      if(S.top-S.elem>=S.size){
        newbase=(ElemType*)realloc(S.elem,(S.size+S.increment)*sizeof(ElemType));//运用realloc函数进行扩容
    if(newbase=NULL) return OVERFLOW;//扩容失败
      S.elem=newbase;
      S.top=S.elem+S.size;
      S.size+=S.increment;
    }
      *S.top++=e;
      return OK;
}

//6.出栈
Status Pop(SqStack &S, ElemType &e){
    if(S.top == S.elem) return ERROR;  
    e = * --S.top;  
    return OK;  
} 

//7.取栈顶元素
Status GetTop(SqStack S,ElemType &e){
    if(S.top == S.elem) return ERROR;  
    e = *(S.top -1);  
    return OK;  
}

//8.访问函数
Status visit(ElemType e){
    printf("%6d",e);
    return OK;
} 

//9.栈遍历
Status StackTravel(SqStack S,Status (*visit)(ElemType)){
    //对栈用visit()遍历
    while(S.top>S.elem){
        visit (*(--S.top));
    }                     
    return OK;
} 

 

以上是关于顺序栈的基本操作实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构基础学习——栈的概念及代码实现

数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

数据结构&算法08-栈概念&源码

栈的顺序存储 - 设计与实现 - API实现

C语言实现顺序栈的基本操作举例

数据结构学习笔记——顺序存储结构实现栈