栈的基本操作——2,8,16进制的入栈(头文件)

来源:互联网 发布:阿里云服务器能干嘛 编辑:程序博客网 时间:2024/06/04 18:50
#define stack_init_size 100#define stackincrement  10typedef int selemtype;typedef int status;const status error=0;const status ok=1;const status overflow=-2;typedef struct{selemtype *top;selemtype *base;int stacksize;}sqstack;status initstack(sqstack &s){   //TODO1-------   //栈的初始化,构造一个空栈;s.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));if(!s.base)exit(overflow);s.stacksize=stack_init_size;s.top=s.base;    return ok;}status stackempty(sqstack s){//TODO2------//判断栈是否为空,空返回ok,否则返回error;if(s.base==s.top)        return ok; else return error;//根据判断结果修改。}status gettop(sqstack s,selemtype &e){//TODO3-------//取栈顶元素if(s.top==s.base)return error;e=*(s.top-1);     return ok;}status push(sqstack &s,selemtype e){//TODO4-------//判断栈是否满if(s.top-s.base>=s.stacksize){s.base=(selemtype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(selemtype));if(!s.base)exit(overflow);s.top=s.base+s.stacksize;s.stacksize+=stackincrement;}    //入栈,讨论不同的情况(2,8,16进制)    switch(e){   case 10:       e='A';   break;       case 11:       e='B';   break;   case 12:       e='C';   break;   case 13:       e='D';   break;   case 14:       e='E';   break;   case 15:       e='F';   break;}*s.top++=e;    return ok;}status pop(sqstack &s,selemtype &e){    //TODO5------//出栈操作    if(s.base==s.top)return error;e=*--s.top;    return ok;}status destroystack(sqstack &s){    free(s.base);     return ok;}status clearstack(sqstack &s){   s.top=s.base;    return ok;}int stacklength(sqstack s){    return s.top-s.base;}

0 0
原创粉丝点击