数组的封装
来源:互联网 发布:solidworks软件自学网 编辑:程序博客网 时间:2024/05/09 23:03
1.增删改查功能的实现
2.要达到目标先了解下C语言中有关内存分配的几个函数 malloc,calloc,realloc
2.1下面的代码比较的是malloc,calloc
#include<stdio.h>#include<stdlib.h>void main(){ { printf("使用malloc函数分配内存,观察是否初始化内存\n"); int *p = (int *)malloc(10*sizeof(int));//分配内存 if (p != NULL) { for (int i = 0; i < 10; i++) { printf("%d\n", p[i]); } } } { printf("使用calloc函数分配内存,观察是否初始化内存\n"); int *p = (int *)calloc(10, sizeof(int));//分配内存 if (p != NULL) { for (int i = 0; i < 10; i++) { printf("%d\n", p[i]); } } } system("pause");}
注:程序运行结果表明calloc与malloc区别在于前者初始化内存数据为0.
2.2 比较calloc 与realloc
realloc功能说明:
1.当前数组后面的内存没有使用中,就直接拓展变长 ,返回值(内存首地址)不变
2.当前数组后面的内存被占用,则先分配新的内存块,返回值(内存首地址)改变—->拷贝原来的内存—->释放原来的内存
#include<stdio.h>#include<stdlib.h>
void main(){ int *p = (int *)calloc(10, sizeof(int));//分配内存 if (p != NULL) { printf("calloc分配的内存地址\n"); for (int i = 0; i < 10; i++) { printf("%p\n", p+i); } } //第一种情况:直接在当前数组后面拓展内存空间 int *p1 = (int *)realloc(p, 80);//变长 if (p1 != NULL) { printf("realloc分配的内存地址%p\n",p1); } //第二种情况:分配新的长度---->拷贝原来的内存---->释放原来的内存 int *p2 = (int *)realloc(p, 100000);//变长 if(p2!= NULL) { printf("realloc分配的内存地址%d\n",p2); } system("pause");}
3.接口定义
#include<stdio.h>#include<stdlib.h>
typedef struct array{ int *pArray;//指针保存数组的起始点 int length;//保存数组的长度 int state;//0代表无序,1代表有序从小到大,2有序从大到小 int real_length;//实际分配的内存长度}MyArray;struct QueryResult{ int **pp; int count;};void init(MyArray* p);//初始化void reinit(MyArray* p);//使用之后重新初始化void add_element(MyArray* p, int num);//增加一个元素void add_elements(MyArray* p, int *pArray, int n);//增加一个数组void print_all(MyArray* p);//打印所有的数据int * find_data(MyArray* p, int num);//返回第一个找到数据的地址void sort(MyArray* p);void modify(MyArray* p, int oldnum, int newnum);//实现修改void delete_one(MyArray* p, int num);//删除第一个找到的数据void delete_all(MyArray* p, int num); //删除所有能找到的数据struct QueryResult find_all(MyArray* p, int num);//返回一片内存,包含所有找到的元素的首地址void insert_element(MyArray* p, int num, int insertnum, int isFront);//数据插入,1代表前面插入,0代表后面插入
注:实现部分考虑到版权问题,省略。
0 0
- 数组的封装
- 一、数组的封装
- 可变数组的封装/链表
- 动态数组类的封装
- 封装数组的indexOf方法
- javasript自己封装的数组方法
- Java 数组类型(基本类型数组类型、封装类型数组类型、数组的数组类型)
- 两维的动态数组的C++封装
- 自定义类封装数组,并对数组进行CRUD操作;有序数组的实习与查找
- Asp数组类封装
- 将数组封装到类中
- 封装 数组库(简易)
- 封装一个数组类
- java封装数组类
- 数组操作函数封装
- 一维数组的简单封装 carray模板。
- js中用数组对一些验证进行简单的封装
- 封装固定长度字符数组的模板容器类
- OpenLayers开发:使用事件
- C++ STL deque 内存布局
- 如何阅读别人的源代码
- [iOS]UIWebView内存消耗过多解决方法
- 使用JDK开发web service
- 数组的封装
- hdu 4861
- OpenGL投影矩阵的推导过程
- Linux下ln链接命令详解
- maven之安装包到本地
- 语言兼容
- 树莓派linux内核编译与固件升级
- OpenLayers:创建地图对比窗口(双地图对比)
- Python实现一个简易的网页抓取程序