|
发表于 2014-11-13 13:07:05
|
显示全部楼层
学习了,不过自己都是用的这个,比较简单,类似于先进先出型堆栈
ui16 ZLQn[4]={100,100,100,100}; //n为总数
static ui16 ZLQh[4]={0,0,0,0}; //栈尾
static ui16 ZLQt[4]={0,0,0,0}; //栈头
ui16 ZLQD[1][100]; //定义的数组深度为100
i16 ZLQnum(ui8 style)//计算当前堆栈实际所存储的数据总数
{
return(ZLQn[style]+ZLQt[style]-ZLQh[style])%ZLQn[style]; //(总数+栈头-栈尾)%总数=当前堆栈存储数据总数
}
i16 ZLQinc(ui8 i,ui8 style) //判断有无超过数组最大深度
{
return (++i>=ZLQn[style])?0:i;
}
ui16 ZLQpush(ui16 c,i16 style) //入栈
{
if (ZLQnum(style)>=ZLQn[style]) return 0;
ZLQD[style][ZLQt[style]]=tmp;
ZLQt[style]=ZLQinc(ZLQt[style],style);
return c;
}
ui16 ZLQpop(ui16 style) //出栈
{
ui16 c;
if (ZLQnum(style)<0) return 99;
c=ZLQD[style][ZLQh[style]];
ZLQh[style]=ZLQinc(ZLQh[style],style);
return c;
}
/*开启AD之前清空堆栈*/
void ZLQpoplast(ui16 style) //弹出堆栈内最后一个数据,相当于清空堆栈,将栈头等于栈尾
{
if (ZLQnum(style)==0) return ; //如果当前堆栈内所存储的实际数据总数等于0,相当于栈内无数据
ZLQh[style]=ZLQt[style]=0; //
return ;
} |
|