#define stack_init_size 100
#define stackincrement 10
typedef 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;
}
栈的基本操作——2,8,16进制的入栈(头文件)
最新推荐文章于 2021-07-22 18:03:57 发布