栈的基本操作——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;
}

你可能感兴趣的:(C语言的小屋)