c泛型编程--栈

来源:互联网 发布:域名转让协议 编辑:程序博客网 时间:2024/06/03 07:15

最近在看编程范式,前半部分主要以C来介绍的,今天学习下栈~


typedef struct{void* elemstr;//存储栈中的元素int contentlen;//栈申请空间int loglength;//当前栈使用空间unsigned int size;//元素类型的大小}pstack;void InitStack(pstack *s,unsigned int size);void DestoryStack(pstack *s);void pushStack(pstack *s,void* elem);void popStack(pstack *s,void* elem);void InitStack(pstack *s, unsigned int size){s->size = size;s->contentlen = 4;//初始容器大小为4s->loglength = 0;s->elemstr = malloc(s->contentlen * size);assert(s->elemstr != NULL);}void DestoryStack(pstack *s){free(s->elemstr);}void pushStack(pstack *s, void* elem){if (s->loglength >= s->contentlen){s->contentlen *= 2;//每次以两倍扩展s->elemstr = realloc(s->elemstr, s->contentlen*s->size);//重新分配空间}void* temp = (char*)s->elemstr + s->loglength * s->size;memcpy(temp, elem, s->size);s->loglength++;}void popStack(pstack *s,void* elem){s->loglength--;void* temp = (char*)s->elemstr + s->loglength * s->size;memcpy(elem,temp,s->size);}

备注:

realloc的使用:检查malloc后续空间是否足够,足够则直接向后扩展,否则重新申请一块空间,并将原来的数据拷贝过来。


原创粉丝点击