C语言之动态数组
来源:互联网 发布:edius mac 编辑:程序博客网 时间:2024/05/20 02:54
/********************************************* Function 根据需要动态分配内存空间*************************************************//*********** DyNaArray.h ****************/#pragma once#include <stdio.h>#include <stdlib.h>#define MAX 100#define true 1#define false 0#ifdef __cplusplusextern "C"{#endiftypedef void (*mPtr)(void *);typedef struct DayNode { void **mPtname; int capacity; //容量 int size; //大小 }DynamArray;/**** 动态数组初始化 ****/DynamArray *InitDynamArr();/**** 插入元素 ****/int InsertDataArr(DynamArray *arr,int pos, void *data);/**** 删除元素 ****/int DeleteDataArr(DynamArray *arr,int pos);/**** 遍历元素 ****/void TraveDataDayArr(DynamArray *arr,mPtr List);/**** 清空元素 ****/void FreeDynamArr(DynamArray *arr);/**** 动态数组大小 ****/int GetSizeDynamArr(DynamArray *arr);#ifdef __cplusplus }#endif/************* DyNaArray.c *****************/#include "DyNaArray.h"#if 0typedef struct DayNode { void **mPname; int capacity; //容量 存放有capacity个mPname的地址 int size; //大小 }DynamArray;#endif/**** 动态数组初始化 ****/DynamArray *InitDynamArr() { DynamArray *mDynam = (DynamArray*)malloc (sizeof(DynamArray)); mDynam->mPtname = (void **)malloc (sizeof(void*)); mDynam->capacity = 5; mDynam->size = 0; return mDynam; }/**** 插入元素 ****/int InsertDataArr(DynamArray *arr,int pos, void *data) { int i = 0; if (NULL == arr || NULL == data) { return false; } /***若插入的pos位置不正确,重新调整位置***/ if (pos < 0 || pos >arr->size) { pos = arr->size; } if (pos >= arr->capacity) { arr->mPtname = (void*)realloc (arr->mPtname,sizeof(void*)*(arr->capacity+1)); arr->capacity++; } for (i=arr->size-1;i>=pos;i--) { arr->mPtname[i+1] = arr->mPtname[i]; } arr->mPtname[pos]=data; arr->size++; return true; }/**** 删除元素 ****/int DeleteDataArr(DynamArray *arr,int pos) { int i; if (NULL == arr) { return false; } if (pos<0 || pos>arr->size-1) { return false; } for (i=pos;i<arr->size-1;i++) { arr->mPtname[i]=arr->mPtname[i+1]; } arr->size--; return true; }/**** 遍历元素 ****/#if 0*****************************mPtr List;定义了一个函数指针变量函数指针的定义有3种方法:a) 先定义函数类型,根据类型定义指针变量(不常用)如:typedef int (mPtr)(int a,int b); mPtr *mPoint = Func; /*Func为函数名*/b) 先定义函数指针类型,根据类型定义指针变量(常用) typedef int (*mPtr)(int a,int b); mPtr mPoint = Func;c) 直接定义函数指针变量(常用) int (*mPtr)(int a,int b); mPtr = Func;*****************************#endifvoid TraveDataDayArr(DynamArray *arr,mPtr List) { int i = 0; if (NULL == arr || NULL == List) { return ; } for (i=0;i<arr->size-1;i++) { List(arr->mPtname[i]); } return ; }/**** 清空元素 ****/void FreeDynamArr(DynamArray *arr) { if (NULL == arr) { return; } if (arr->mPtname!=NULL) { free(arr->mPtname); arr->mPtname = NULL; } if (arr != NULL) { free (arr); arr =NULL; } return; }/**** 动态数组大小 ****/int GetSizeDynamArr(DynamArray *arr) { if (NULL == arr) { return false; } printf ("size = %d\n",arr->size); return true; }/***************** Test.c ******************/#include "DyNaArray.h"typedef struct Student { char name[MAX]; int age; }Stu;/****打印接口****/void ListPrintArr(void *data) { Stu *mPtr = (Stu*)data; printf ("name = %s\n age = %d\n",mPtr->name,mPtr->age); }/****初始化Stu的成员变量****/void ActDataFunc() { /**** 数组初始化 ****/ DynamArray *mPtr = NULL; Stu s1 = {"lixiaogang",24}; Stu s2 = {"wang",23}; Stu s3 = {"tian",22}; Stu s4 = {"zhang",25}; Stu s5 = {"xiao",26}; mPtr = InitDynamArr(); /****插入元素****/ InsertDataArr (mPtr,0,&s1); InsertDataArr (mPtr,0,&s2); InsertDataArr (mPtr,0,&s3); InsertDataArr (mPtr,0,&s4); InsertDataArr (mPtr,0,&s5); /****通过函数指针调用函数****/ TraveDataDayArr (mPtr,ListPrintArr); }int main(int argc,char *argv[]) { ActDataFunc (); system ("pause");#if 0#define EXIT_SUCCESS 0#define EXIT_FAILURE 1#endif return EXIT_SUCCESS; }
1 0
- C语言之动态数组
- C语言之动态数组
- 数据结构(c语言)之动态数组
- C语言动态数组
- c语言 动态数组
- C语言动态数组
- C语言动态数组
- C语言动态数组
- C语言动态数组
- C语言动态数组
- c语言动态数组
- C语言动态数组
- C语言的那些小秘密之动态数组
- C语言的那些小秘密之动态数组
- C语言的那些小秘密之动态数组
- C语言的那些小秘密之【动态数组】
- C语言的那些小秘密之动态数组 .
- C语言的那些小秘密之动态数组
- openconnect 编译
- 欢迎使用CSDN-markdown编辑器
- 网络安全监控 NSM 笔记
- window.onload和body的onload的区别
- 倒数求和
- C语言之动态数组
- MyBatis-入门、动态代理、配置
- iOS 转场动画UIViewControllerTransitioningDelegate代理
- 阶乘
- 数据结构——栈实现括号匹配
- JavaSE_split 调用特殊的分隔符
- oracle创建数据库
- 《Going Deeper With Convolution》全文译解
- Appium中的activity无法启动问题