zoukankan      html  css  js  c++  java
  • 顺序栈模板

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    #define LIST_INIT_SIZE 100
    #define LISTINCREMENT 10
    typedef int status;
    typedef int elemtype;
    typedef struct node{
          elemtype *base;
          elemtype *top;
          int size;
    }sqstack;
    status initstack(sqstack &s){//初始化栈
         s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype));
         if(!s.base)
            exit(OVERFLOW);
            s.top=s.base;
            s.size=LIST_INIT_SIZE;
            return OK;
    }
    status get_top(sqstack s,elemtype &e){//获得栈顶元素
         if(s.top==s.base)
         return ERROR;
         e=*(s.top-1);
         return OK;
    }
    status push(sqstack &s,elemtype e){//向栈中输入元素
         if(s.top-s.base>=s.size){
            s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype));
            if(!s.base)
                 exit(OVERFLOW);
                 s.top=s.base+s.size;
                 s.size+=LISTINCREMENT;
         }
         *s.top++=e;
         return OK;
    }
    status pop(sqstack &s,elemtype &e){//删除栈顶元素
          if(s.top==s.base)
          return ERROR;
          e=*--s.top;
          return OK;
    }
    status empty(sqstack &s){//判断栈是否为空
          if(s.base==s.top)
          return TRUE;
    
          else
          return FALSE;
    }
    status clearstack(sqstack &s){//将栈清空
       s.top=s.base;
       return OK;
       /* elemtype e;
             while(!empty(s)){
               pop(s,e);
             }*/
    }
    void get_lenght(sqstack s,int &len){//获得栈的长度
       len=s.top-s.base;
    }
    void destroy(sqstack &s){//销毁栈
        free(s.base);
        s.base=s.top=NULL;
        s.size=0;
    
    }
    int main(){
            sqstack s;
            initstack(s);
            for(int i=2;i<=5;i++){
               push(s,i);
            }
            elemtype e;
            int len;
            get_lenght(s,len);//获得栈的长度
            destroy(s);//销毁栈
            printf("%d
    ",len);
         clearstack(s);//清空栈
            while(!empty(s)){
                get_top(s,e);
                 printf("%d
    ",e);//从栈顶依次输出栈
                 pop(s,e);
            }
            return 0;
    }
  • 相关阅读:
    Javaweb 第4 天xml 课程
    Javaweb 第2天 JavaScript课程
    Javaweb 第1天 HTML和CSS课程
    第27天反射(解剖)技术
    Ip 讲解
    第26 天网络编程
    第25天多线程、网络编程
    【剑指offer】连续子数组的最大和,C++实现
    [剑指offer]数组中最小的K个数,C++实现
    【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/5036243.html
Copyright © 2011-2022 走看看