C语言--通用类型栈
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
typedef struct {
void *elems;
int elemSize;
int logicLen;
int allocLen;
}stack;
void StactNew(stack *,int);
void StackDispose(stack *);
void StackPush(stack *,void *);
void StackPop(stack *,void *);
void StackNew(stack *s,int elemSize)
{
s->elemSize=elemSize;
s->logicLen=0;
s->allocLen=4;
s->elems=malloc(s->allocLen*s->elemSize);
assert(s->elems!=NULL);
}
void StackDispose(stack *s)
{
free(s->elems);
}
void StackPush(stack *s,void *elemAddr)
{
if(s->logicLen==s->allocLen){
s->allocLen*=2;
s->elems=realloc(s->elems,s->allocLen*s->elemSize);
assert(s->elems!=NULL);
}
void *target;
target=(char *)s->elems+s->logicLen*s->elemSize;
memcpy(target,elemAddr,s->elemSize);
s->logicLen++;
}
void StackPop(stack *s,void *elemAddr)
{
assert(s->logicLen>0);
s->logicLen--;
void *source;
source=(char *)s->elems+s->logicLen*s->elemSize;
memcpy(elemAddr,source,s->elemSize);
}
//字符串栈存储示例
int main()
{
stack stringStack;
char *name[]={"Apig","Bdog","Cfox"};
StackNew(&stringStack,sizeof(char *));
for(int i=0;i<3;i++){
StackPush(&stringStack,&name[i]);
}
for(int i=0;i<3;i++){
char *getS;
StackPop(&stringStack,&getS);
printf("The string %d is %s.\n",i,getS);
}
StackDispose(&stringStack);
return 0;
}
C语言--通用类型栈的更多相关文章
- PHP中的位运算与位移运算(其它语言通用)
/* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...
- Swift 通用类型和通用函数 | Generic type and function
如果你想交换两个变量的值: 1. 整型 func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a = b b = temp ...
- 生成跨语言的类型声明和接口绑定的工具(Djinni )
Djinni 是一个用来生成跨语言的类型声明和接口绑定的工具,主要用于 C++ 和 Java 以及 Objective-C 间的互通. 示例接口定义文件: # Multi-line comments ...
- ABAP基本数据类型、通用类型
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- c语言的类型、运算符与表达式
title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...
- 3. Go语言基本类型
Go语言基本类型如下: bool string 数值类型 (int8, int16, int32, int64, int, uint8, uint16, uint32, uint64, uint, f ...
- [编程] C语言枚举类型(Enum)
C语言枚举类型(Enum):定义形式为:enum typeName{ valueName1, valueName2, valueName3, ...... };enum 类型名{名字1,名字2} 枚举 ...
随机推荐
- A+B问题通解_Pascal_C++_Java
世界不断发展,各种电子设备不断变得更加迷你,代码却越写越长…… A+B Problem Input:Two integer A,B Output:The ans of A+B 1971年,Niklau ...
- 解决error C2059: 语法错误:“::”问题
错误代码提示: >f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(): error C2059: 语法错误:“::”f:\ope ...
- 集合函数AVG,SUM,MAX,MIN
需要计算这些值的平均值.使用函数AVG(),你可以返回一个字段中所有值的平均值. 假如你对你的站点进行一次较为复杂的民意调查.访问者可以在1到10之间投票,表示他们喜欢你站点的程度.你把投票结果保存在 ...
- 操作系统是怎么工作的——mykernel环境的搭建
可以参见:https://github.com/mengning/mykernel 首先感谢:http://www.euryugasaki.com/archives/1014 1.搭建实验环境(实验环 ...
- 检测zookeeper和kafka是否正常
cd $(dirname $) source ~/.bash_profile count_zoo=`ps -ef | grep "config/zookeeper.properties&qu ...
- java.lang.NumberFormatException: For input string: "Y"
nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. ...
- ionic 向後台請求json 數據 在頁面上的顯示問題
我向服務器請求數據,獲取到的數據竟然不能顯示在頁面上 我那個氣啊..... <ul> <!-- <li ng-repeat="phone in phones&quo ...
- svn服务器搭建与配置
http://www.cnblogs.com/armyfai/p/3985660.html
- c#高效比对大量图片
比较图片的方法 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对.这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好.但是在大量图片比对的时候,过长的反应时间和对服务器比较高的消耗 ...
- css3- border
css3-border 1.border-color 2.border-image 3.border-radius ( none | <length>{1,4} [ / <leng ...