[C]堆栈,泛型
来源:互联网 发布:淘宝引流 编辑:程序博客网 时间:2024/06/05 05:05
stack.h
typedef struct{void * elems;int elemSize;int logicLen;int allocLen;}stack;
stack.c
#include <stdio.h>#include "stack.h"#include <assert.h>#include <stdlib.h>#include <string.h>void stackNew(stack * s,int elemSize){ s->logicLen = 0; s->allocLen = 4; s->elemSize = elemSize; s->elems = malloc(s->allocLen * s->elemSize); assert(s->elems != NULL);}void stackDispose(stack * s){ free(s->elems);}static void stackGrow(stack * s){ s->allocLen *= 2; s->elems = realloc(s->elems,s->allocLen * s->elemSize);}void stackPush(stack * s,void *elemAddr){ if (s->logicLen == s->allocLen){ stackGrow(s); assert(s->elems != NULL); } memcpy((char *)(s->elems) + s->logicLen * s->elemSize,elemAddr,s->elemSize); s->logicLen ++;}void stackPop(stack * s,void * elemAddr){ assert(s->logicLen != 0); s->logicLen --; memcpy(elemAddr,(char *)s->elems + s->logicLen * s->elemSize,s->elemSize);}
stack_example.c
#include <stdio.h>#include "stack.c"int main(void){ int i; char * value; stack s; char * strings[5] = {"qwerty","asdfgh","zxcvbn","qazwsxedc","tgbyhnujm"}; stackNew(&s,sizeof(char *)); for(i=0;i<5;i++){ stackPush(&s,&(strings[i])); } for(i=0;i<5;i++){ stackPop(&s,&value); printf("%s\n",value); } printf("%d",sizeof(long)); getchar(); return 0;}
0 0
- [C]堆栈,泛型
- 【C++】堆栈
- C 堆栈
- [C/C++]堆栈指引
- 堆栈的C实现
- C语言实现堆栈
- c语言 堆栈
- C语言的堆栈
- [C#]基本概念:堆栈
- 数据结构---堆栈(C#)
- C/C++堆栈简介
- C中堆栈
- c语言的堆栈
- C语言堆栈入门
- C/C++堆栈指引
- c语言和堆栈
- 堆栈c实现
- 纯c实现堆栈
- Android studio 使用开发日记(一),Gradle的下载更新
- 如何在Centos下设置Vim的永久显示行号功能?
- CCScale9Sprite点九图的制作和使用
- 栈,堆,全局,文字常量,代码区总结
- myeclipse 下 svn地址的切换
- [C]堆栈,泛型
- ListView的item水平滑动(类QQ的左滑显示删除按钮)
- JZ2440平台定时器实验及分析
- 环境变量:用户变量和系统变量
- Recurrent Neural Network Based Language Model(RNNLM)原理及BPTT数学推导
- Struts2的MVC思想
- 欢迎使用CSDN-markdown编辑器
- 深入浅出Mybatis系列(一)---Mybatis入门
- linux笔记