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

#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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值