当前位置: 首页 > news >正文

网站建设与维护实训ppt网店装修网站

网站建设与维护实训ppt,网店装修网站,长春网站优化教程,昌乐网站建设动态数组相比于静态数组具有更大的灵活性#xff0c;因为其大小可以在运行时根据程序的需要动态地进行分配和调整#xff0c;而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况#xff0c;因为它们可以在不浪费空间的情况下根据需要…动态数组相比于静态数组具有更大的灵活性因为其大小可以在运行时根据程序的需要动态地进行分配和调整而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况因为它们可以在不浪费空间的情况下根据需要动态增加或减少存储空间。 动态数组的内存空间是从堆(heap)上分配的动态数组需要程序员手动管理内存因为它们的内存空间是在程序运行时动态分配的。程序员需要在使用完动态数组后手动释放其内存空间否则可能会导致内存泄漏的问题进而导致程序崩溃或者运行缓慢。因此在使用动态数组时程序员需要特别注意内存管理的问题。 读者需自行创建头文件dynamic.h并拷贝如下动态数组代码实现 #include stdlib.h #include string.hstruct DynamicArray {void **addr; // 存放元素或结构体的首地址int curr_size; // 存放当前元素数量int max_size; // 存放当前最大元素数 };// 初始化动态数组,初始化后直接返回数组的首地址 struct DynamicArray *InitDynamicArray(int size) {// 如果小于0则说明没有元素,返回NULLif (size 0){return NULL;}// 分配结构指针,此处分配的是结构体指针,并没有分配空间struct DynamicArray *ptr malloc(sizeof(struct DynamicArray));if (ptr ! NULL){// 将当前元素索引设置为0ptr-curr_size 0;// 默认最大数组元素数为sizeptr-max_size size;// 实际分配存储空间大小是max_size最大元素ptr-addr malloc(sizeof(void *) * ptr-max_size);return ptr;}return NULL; }// 将元素插入到指定位置 void InsertDynamicArray(struct DynamicArray *ptr, int index, void *data) {// 判断如果数组不为空,或者是data不为空,则继续执行if (ptr ! NULL || data ! NULL){// 如果插入位置小于当前0,或者大于当前元素总个数if (index 0 || index ptr-curr_size){// 就自动把它插入到元素的末尾位置index ptr-curr_size;}// 紧接着判断当前元素数是否大于最大值,大于则分配空间if (ptr-curr_size ptr-max_size){// 分配一块更大的空间,这里分配原始空间的2倍int new_max_size ptr-max_size * 2;void **new_space malloc(sizeof(void *) * new_max_size);// 接着将原来空间中的数据拷贝到新分配的空间memcpy(new_space, ptr-addr, sizeof(void *) * ptr-max_size);// 释放原来的内存空间,并更新指针的指向为新空间的地址free(ptr-addr);ptr-addr new_space;ptr-max_size new_max_size;}// 开始移动元素,给ins元素腾出空来for (int x ptr-curr_size - 1; x index; --x){// 从后向前,将前一个元素移动到后一个元素上ptr-addr[x 1] ptr-addr[x];}// 设置好指针以后,开始赋值ptr-addr[index] data;ptr-curr_size;return 1;}return 0; }// 遍历数组中的元素,这里的回调函数是用于强制类型转换,自定义输出时使用 void ForeachDynamicArray(struct DynamicArray *ptr, void(*_callback)(void *)) {if (ptr ! NULL || _callback ! NULL){for (int x 0; x ptr-curr_size; x){// 调用回调函数并将数组指针传递过去_callback(ptr-addr[x]);}} }// 根据位置删除指定元素,index 元素的下标位置 void RemoveByPosDynamicArray(struct DynamicArray *ptr, int index) {if (ptr 0)return 0;// 判断当前插入位置index必须大于0且小于curr_sizeif (index 0 || index ptr-curr_size - 1){for (int i index; i ptr-curr_size - 1; i){// 每次循环都将后一个元素覆盖到前一个元素上ptr-addr[i] ptr-addr[i 1];}// 最后当前元素数量应该减去1ptr-curr_size--;} }// 按照元素的指定值进行元素删除,这里需要回调函数指定要删除元素的值是多少 void RemoveByValueDynamicArray(struct DynamicArray *ptr, void *data, int(*compare)(void*, void *)) {if (ptr ! NULL data ! NULL compare ! NULL){for (int i 0; i ptr-curr_size; i){if (compare(ptr-addr[i], data)){RemoveByPos_DynamicArray(ptr, i);break;}}} }// 销毁数组 void DestroyDynamicArray(struct DynamicArray *ptr) {if (ptr ! NULL){if (ptr-addr ! NULL){free(ptr-addr);ptr-addr NULL;}free(ptr);ptr NULL;} }上述代码的使用很容易如下代码实现了动态数组的基本操作包括创建动态数组、插入元素、删除元素、遍历元素和销毁动态数组。其中定义了一个自定义结构体Student用于作为动态数组的元素。在使用InitDynamicArray函数创建动态数组之后使用InsertDynamicArray函数将四个元素插入到动态数组中其中第三个元素插入的位置为3。然后使用RemoveByPosDynamicArray函数根据下标移除第一个元素使用RemoveByValueDynamicArray函数根据元素的值移除第二个元素其中使用myCompare回调函数对比元素。最后使用ForeachDynamicArray函数遍历所有元素并使用MyPrint回调函数输出元素的值。最终销毁动态数组释放内存。 #include dynamic.h// 自定义结构体 struct Student {int uid;char name[64];int age; };// 回调函数用于输出元素 void MyPrint(void *data) {// 强制类型转换,转成我们想要的类型struct Student *ptr (struct Student *)data;printf(Uid: %d -- Name: %s \n, ptr-uid, ptr-name); }// 回调函数用于对比元素 int myCompare(void *x, void *y) {struct Student *p1 (struct Student *)x;struct Student *p2 (struct Student *)y;if (strcmp(p1-name, p2-name) 0){return 1;}return 0; }int main(int argc, char *argv[]) {//创建动态数组struct DynamicArray *ptr InitDynamicArray(5);// 创建元素struct Student stu1 { 1001, admin1, 22 };struct Student stu2 { 1002, admin2, 33 };struct Student stu3 { 1003, admin3, 44 };struct Student stu4 { 1004, admin4, 55 };// 将元素插入到数组InsertDynamicArray(ptr, 0, stu1);InsertDynamicArray(ptr, 1, stu2);InsertDynamicArray(ptr, 3, stu3);InsertDynamicArray(ptr, 4, stu4);// 根据下标移除元素RemoveByPosDynamicArray(ptr, 0);// 删除元素是p_delete的数据struct Student p_delete { 1002, admin2, 33 };RemoveByValueDynamicArray(ptr, p_delete, myCompare);// 遍历元素ForeachDynamicArray(ptr, MyPrint);// 销毁顺序表DestroyDynamicArray(ptr);system(pause);return 0; }本文作者 王瑞 本文链接 https://www.lyshark.com/post/f32bb5d5.html 版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处
http://www.lakalapos1.cn/news/23795/

相关文章:

  • 网站建设 兼职网络推广网上营销
  • 缅甸网站建设找企业老板的软件或平台
  • 夜夜做新郎网站在线视频优质网站排名公司
  • 濮阳网站建设费用电脑租赁
  • 泊头做网站seo网络优化师
  • 网站的佣金怎么做会计分录建设银行网站用户注册不了
  • 如何用网站模板建设网站WordPress运行时间插件
  • 社区微网站建设需求分析一个基于php网站开发课题设计的业务流程描述
  • 做ppt哪个网站好公众号可以做网站维护链接吗
  • soho做网站科技公司的网站
  • 基于mvc的jsp网站开发上海房地产网站官网
  • 艺术名画网站怎么建设工程公司的经营范围
  • 互联网定制网站网站备案的好处
  • 重庆自助建站模板开发者是什么职业
  • 合肥做公司网站公司企业网站的信息内容包括什么
  • 论文中小企业的网站建设贵阳官网建设价格
  • 汕头网站优化哪家好传媒公司签约主播合同
  • 网站建设考试卷a卷俄语网站建设
  • 网站开发和后期维护费用元器件商城网站建设
  • 乐清网站网站建设svg图片做网站背景
  • 常州市建设项目审批网站境内境外网站区别
  • 平台和自建网站服务提供者网站备案协议
  • 企业网站的建立特点是什么四川建设网入川备案网站
  • 怎么查询网站是谁做的重庆市公共资源交易网
  • 福田专业网站建设公司哪家好网架结构安装多少钱一平方
  • 东莞网站建设-南城石佳wordpress对外发邮件
  • 白石洲网站建设广州网络推广策划公司
  • 小公司怎么做免费网站旅游网站建设毕业设计
  • 百度企业网站建设外贸买家网站
  • 怎么样查中企动力做的网站dw做的网站怎样做成手机版的