编程方式6 笔记 stack
来源:互联网 发布:java身份证号判断性别 编辑:程序博客网 时间:2024/06/16 06:18
int栈
typedef struct{ int* elems; int logicallen;//当前元素个数 int alloclength;//最大容量}stack;void StackNew(stack* s);void StackDespose(stack* s);void StackPush(stack* s,int value);int StackPop(stack* s);
stack.c
void StackNew(stack *s){ s->loglength=0; s->alloclength=4; s->elems=malloc(4*sizeof(int)); assert(s->elems!=NULL;}void StackDispose(stack *s){ free(s->elems); //不能写free(s),因为s不完全是动态分配的}void StackPush(stack *s,int value){ if(s->loglength==s->alloclength) { s->alloclength*=2; s->elems=realloc(s->elems,s->alloclength*sizeof(int)); assert(s->elems!=NULL); } s->elems[s->loglenth]=value; s->loglenth++;}int StackPop(stack *s){ assert(s->loglenth>0); s->loglenth--; return s->elems[s->loglength];}
stack s;StackNew(&s);for(int i=0;i<5;i++){ StackPush(&s,i);}SatckDispose(&s);void StackNew(stack *s){ s->logicallen=0; s->alloclen=4; s->elems=malloc(4*sizeof(int)); assert(s->elems!=NULL);}
泛型栈
typedef struct{ void* elems; int elemSize;//元素大小不知道 int logicallen;//当前元素个数 int alloclength;//最大容量}stack;void StackNew(stack* s,int elemSize);void StackDespose(stack* s);void StackPush(stack* s,void* elemAddr);int StackPop(stack* s,void* elemAddr);
stack.c
void StackNew(stack *s,int elemSize)//s应该按引用传递{ assert(s->elemSize>0); s->loglength=0; s->alloclength=4; s->elems=malloc(4*elemSize); assert(s->elems!=NULL;}void StackDispose(stack *s){ free(s->elems); //不能写free(s),因为s不完全是动态分配的}void StackPush(stack *s,void *elemAddr){ if(s->loglength==s->alloclength) { StackGrow(s); } void* target=(char* )s->elems+s->loglength*s->elemSize; //void指针不能做算数运算所以要先转为char*(unsigned long*也行)再转void* memcpy(target,elemAddr,s->elemSize); s->loglength++;}static void StackGrow(stack *s){ s->alloclength*=2; s->elems=realloc(s->elems,s->alloclength*sizeof(int)); assert(s->elems!=NULL);}int StackPop(stack *s,void * elemAddr){ void* source=(char*)s->elems+(s->loglength-1)*s->elemSize memcpy(elemAddr,source,s->elemSize); s->loglength--;}
阅读全文
0 0
- 编程方式6 笔记 stack
- Stack笔记
- linux应用编程笔记(6)库函数方式实现文件复制编程
- Leetcode解题笔记(Stack)
- Leetcode解题笔记(Stack)
- Stack类学习笔记
- ELK Stack安装笔记
- java编程思想11.8-Stack
- 栈(Stack)的编程实现
- Network Stack 学习笔记(1)
- 笔记:ndk-stack和addr2line
- 笔记之stack堆栈容器
- LeetCode笔记:155. Min Stack
- C++ STL 学习笔记 stack
- [Windows编程] stack overflow != stack buffer overflow
- struts2系列学习笔记(9)---------------编程方式的验证
- MyBatis学习笔记(二)---以接口方式编程
- Java并发编程实战笔记(4)- 线程实现方式
- 发送fetch请求时多发送了一个OPTIONS请求
- Springboot中使用Swagger2构建RESTful API文档
- AngularJS表单验证
- 类的设计原则
- python 在makemigrations时报Please select a fix:...
- 编程方式6 笔记 stack
- Linux虚拟化与容器化
- c++ map的用法
- Android探索之HttpURLConnection网络请求
- 调整数组顺序使基数位于偶数前面java实现
- Halcon相机标定
- 分治专题
- 大数据建模分析--举哥
- VOFM例程开发实现定价增强