您的位置:首页 > 编程语言 > C语言/C++

C实现的泛型栈

2014-02-28 11:41 543 查看
typedef struct{

void *elems;    //栈底指针
int loglen;       //已经使用的长度
int alloclen;    //已经申请的长度
int elemSize;   //单个元素的长度

}stack;

void StackNew(stack *s, int elemSize)
{

assert(elemSize > 0);
s->elemSize = elemSize;
s->loglen = 0;
s->alloclen = 4;
s->elems = malloc(4 *elemSize);
assert(s->elems != NULL);

}

void StackPush(stack *s, void *elemAdd)
{
        //栈满则采用加倍策略增长

if (s->loglen == s->alloclen)
{
          StackGrow(s);
}

void *target = (char *)(s->elems) + loglen * (s->elemSize);
memcpy(target, elemAdd, s->elemSize);
s->loglen++;

}

static  void StackGrow(stack *s)
{
     s->alloclen *= 2;
      s->elems = realloc(s->elems, (s->alloclen) * (s->elemSize));
}

void StackPop(stack *s,  void *elempop)
{
          //获取栈顶元素指针

void *source = (char*)(s->elems) + (s->loglen - 1 ) *(s->elemSize);
memcpy(elempop, source, s->elemSize);
s->loglen--;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 泛型