编程范式,3/11/18

栈的泛型(2),纯C实现

 stack.h
 typedef struct{
                void* elems;
                int elemSize;
                int loglength;
                int alloclength;
                }stack;
 void StackNew( stack* s, int elemSize);
 void StackDispose(stack* s);
 void StackPush(stack* s,void* elemAddr);
 void StackPop(stack* s, void* elemAddr);
    stack.c
    void *StackNew(Stack* s, int elemSize)
    {
          assert(s->elemSize > 0);
          s->elemSize = elemSize;
          s->elemSize = elemSize;
          s->loglength = 0;
          s->alloclength = 4;       
          s->elems = malloc(4 * elemsSize);
          assert( s->elems !=NULL);
    }
    void *Dispose(stack*s)
    {
     free(s->elems);
    }  
    void StackPush(stack* s,void* elemAddr)
   {
	  if (s->loglength == s->alloclength)
                 stackGrow(s);
          void * target = (char*)s->elems+s->loglength*s->elemSize;
          memcpy(target,elemAddr, s->elemSize);
  	 s->loglength++;
   };
   static void StackGrow(stack* s)
 {
  s->alloclength *= 2;
  s->elems = realloc(s->elems, s->elmeSize);
 };
  StackPop(stack* s,void* elemAddr)
{
  void*Source =
  (char*)s->elems + (s->loglength-1)*(s->elemSize);
  memcpy(elemAddr,Source,s->elemSize);
  s->loglength--;
}
字符串栈实现实例
int main()
{
 const char* friends[] = {"AI","Bob","Carl"};
 stack stringstack;
 StackNew(&stringstack,sizeof(char*));
 for (int i=0;i<3;i++){
         char* cpy = strup(friends[i]);
        StackPush(&stringstack, &cpy);
 	}
char* name;
for (int i=0; i<3;i++){
	StackPop(&stringstack,&name);
	printf("%s\n",name);
	free(name);
	StackDispose(&stringstack);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值