精华内容
下载资源
问答
  • 顺序栈的基本操作

    2015-11-23 12:14:06
    顺序栈的基本操作

    下面就实现顺序栈的几个基本操作,包括判空、入栈、出栈、取栈顶元素、清空栈、销毁栈等。

    //顺序栈的类型定义如下
    typedef struct{
      ElemType *elem; //存储空间的基址
      int top;        //栈顶位标
      int size;       //当前分配的存储容量
      int increment;  //扩容时,增加的存储容量
    } SqStack;        //顺序栈
    
    //初始化顺序栈
    Status InitStack_Sq(SqStack &S, int size, int inc) {
     S.elem = (ElemType*)malloc(size*sizeof(ElemType));//分配空间
     if(NULL == S.elem) return ERROR;
     S.top = 0;                   //置S为空栈
     S.size = size;               //初始化容量值
     S.increment = inc;           //初始化增量值
     return OK;
     }
    
    //入栈
    Status Push_Sq(SqStack &S, ElemType e) {
    ElemType *newbase;
    if(S.top >= S.size) { //如果栈满,则扩容
        newbase = (ElemType*)realloc(S.elem,                                      S.size+S.increment)*sizeof(ElemType));
        if(NULL == newbase) return ERROR;
        S.elem = newbase;
        S.size += S.increment;
      }
      S.elem[S.top++] = e; //e入栈,S.top加1
      return OK;
    }
    
    //判空
    Status StackEmpty_Sq(SqStack S) {
      if(S.top == 0) return TRUE;
        return FALSE;
    }
    
    //取栈顶元素
    Status GetTop_Sq(SqStack S, ElemType &e) {
      if(S.top == 0) return ERROR;
      e = S.elem[S.top - 1];
      return OK;
    }
    
    //栈顶元素出栈
    Status Pop_Sq(SqStack S, ElemType &e) {
      if(S.top == 0) return ERROR;
      e = S.elem[--S.top];
      return OK;
    }
    
    //获取栈内已有的数据长度
    int GetStackLength_Sq(SqStack &S) {
      return S.top - S.elem;
    }
    
    //销毁顺序栈
    Status DestoryStack_Sq(SqStack &S) {
      free(S.elem);
      S.elem = S.top = NULL;
      S.size = 0;
      return TRUE;
    }
    
    //清空顺序栈
    Status ClearStack_Sq(SqStack &S) {
      S.top = S.elem;
      return TRUE;
    }
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,791
精华内容 1,116
关键字:

顺序栈的基本操作