int型动态数组总结

简单的数据结构之-int型动态数组

这个貌似没有参考可以借鉴,如果哪位有幸看到,请您给我说一下哈!再次感谢各位了!

想关的参看的资料来自某培训机构,我是参照动态数组写的

想关的介绍文章 C语言中文网:http://c.biancheng.net/cpp/html/2790.html

数组都有一个固定的长度,超出它的长度就无法再添加新的元素,但是动态数组可以动态的增加数组的长度,可以无限的插入数据。

// 动态数组是一个不存在的数据类型,所以需要定义一个结构体来说明动态数组的类型,数组需要空间存储数据,因为对初始容量什么的未知,所以需要定义一个指针(int*):

数组有自己的容量,当容量不够时,需要动态增加容量,既然有容量,那么就需要一个变量来存储数组的实际长度

typedef struct _INT_DYNAMICARRAY

{

int *array;

int arrayLen;

int capacity;

}IntDynamicArray;

数组结构体,定义好了之后,还需要定义想关的操作函数,增删改查是基本数据结构的四个函数,还有初始化、打印、释放,数组的大小、容量、数据的排序,

动态数组的初始化:

主要功能就是对动态数据的结构体分配内存空间

int Init_IntDynamicArray(IntDynamicArray **Array, int Capacity)

{

// 对传入的参数进行判断,如果为空,则终止下面的执行,没空间没法执行

if (Array == NULL)

{

exit(-1);

}

// 为动态数组的结构体开辟空间

*Array = (IntDynamicArray *)malloc(sizeof(IntDynamicArray));

if (*Array == NULL)

{

exit(-2);

}

// 为(*Array)->array 开辟一段长度为 Capacity 的空间用来存储数组的数据

(*Array)->array = (int *)malloc(sizeof(int)*Capacity);

// 对开辟的空间一定要判断,这儿没有用return 的原因是开辟空间失败,后面的操作有报错的可能

if ((*Array)->array == NULL)

exit(-2);

// 对开辟的空间赋初始值

for (int i = 0; i < Capacity; ++i)

(*Array)->array[i] = 0;

// 对结构体中的关键字进行初始化

(*Array)->arrayLen = 0;

(*Array)->capacity = Capacity;

return 0;

}

// 元素的插入

int Insert_IntDynamicArray(IntDynamicArray *Array, int Data,int Pos)

{

// 对传入的参数进行检查

if (Array == NULL)

{

return -1;

}

// 对传入的参数进行合理化处理

if (Pos < 0 )

{

Pos = 0;

}

if (Pos > Array->arrayLen)

{

Pos = Array->arrayLen;

}

// 如果空间不够,那么开辟一段空间来存储新的数据

if (Array->arrayLen == Array->capacity)

{

// 开辟两倍的空间

int *array = (int *)malloc(sizeof(int) * 2 * Array->capacity);

if (array == NULL)

{

return -2;

}

// 将原数据的元素拷贝过来,这儿也可以用循环

memcpy(array, Array->array, sizeof(int)*Array->arrayLen);

// 释放原来的空间

free(Array->array);

Array->array = array;

Array->capacity *= 2;

// 对新开辟的空间进行初始化

for (int i = Array->arrayLen; i < Array->capacity; ++i)

{

array[i] = 0;

}

}

// 为插入元素腾出空间

for (int i = Array->arrayLen-1; i >= Pos; --i)

{

Array->array[i+1] = Array->array[i];

}

// 插入新元素

Array->array[Pos] = Data;

++ Array->arrayLen;

return 0;

}

// 元素的删除

int EraseByPos_IntDynamicArray(IntDynamicArray *Array, int Pos)

{

if (Array == NULL)

{

return -1;

}

if (Pos < 0 || Pos >= Array->arrayLen)

{

return -2;

}

// 直接通过覆盖的方式删除

for (int i = Pos; i < Array->arrayLen - 1; ++i)

{

Array->array[i] = Array->array[i + 1];

}

-- Array->arrayLen;

return 0;

}

// 修改

int Modif_IntDynamicArray(IntDynamicArray *Array, int Pos, int Data)

{

if (Array == NULL)

{

return -1;

}

if (Pos<0 || Pos>Array->arrayLen - 1)

{

return -2;

}

Array->array[Pos] = Data;

return 0;

}

// 通过位置查找

int SeekByPos_IntDynamicArray(IntDynamicArray *Array, int Pos)

{

if (Array == NULL)

{

return 0x00;

}

if(Pos<0||Pos>Array->arrayLen-1)

{

return 0x01;

}

return Array->array[Pos];

}

// 查找第一次出现某值的位置

int SeekByVal_IntDynamicArray(IntDynamicArray *Array, int Val)

{

if (Array == NULL)

{

return 0x00;

}

for (int i = 0; i < Array->arrayLen; ++i)

{

if (Array->array[i] == Val)

return i;

}

return -1;

}

// 打印动态数组

void Print_IntDynamicArray(IntDynamicArray *Array)

{

if (Array == NULL)

{

return;

}

for (int i = 0; i < Array->arrayLen; ++i)

{

printf("%d ", Array->array[i]);

}

printf("\n");

}

// 数组长度

int Size_IntDynamicArray(IntDynamicArray *Array)

{

if (Array == NULL)

{

return -1;

}

return Array->arrayLen;

}

// 数组容量

int Capacity_IntDynamicArray(IntDynamicArray *Array)

{

if (Array == NULL)

{

return -1;

}

return Array->capacity;

}

// 销毁

int Destroy_IntDynamicArray(IntDynamicArray *Array)

{

if (Array == NULL)

{

return -1;

}

if (Array->array != NULL)

{

free(Array->array);

}

free(Array);

return 0;

}

呵呵!结束了!

时间: 2024-08-09 00:00:17

int型动态数组总结的相关文章

通用型动态数组的总结

基本数据结构之-通用型动态数组 动态数组的应用主要是对于长度未知的数组,先开辟一段空间来存储数据,当空间不够时,在开辟两倍的空间来存储数据 和普通数组的区别就是,我们可以不用关心数组的长度的问题,唯一需要关注的就是数据的类型是自定义数据类型还是基本数据类型,但是不论是基本数据类型还是自定义的数据类型,都需要自定义两个函数,这两个函数时遍历(打印)函数和比较函数,因为,在传递的是地址,没法再里面判断是什么类型,只能交给使用者去定义它的想关的函数, 先说基本的结构: 为了适应更多的数据类型,我们存储

生成长度为n的int型随机数组,数组元素范围为0~n-1,每个元素都是唯一的。只使用基本数据类型。

import java.util.Arrays; import java.util.Comparator; import java.util.Random; import java.util.Scanner; /* 生成长度为n的int型随机数组,数组元素范围为0~n-1,每个元素都是唯一的.只使用基本数据类型. */ class Solution { public static void rand(int[] arr, int n) { for(int i = 0; i < n; i++) {

二维数组指针及二维动态数组的分配问题

在我以前的文章中都有讲过关于数组指针及指针数组的相关问题,但是讲得不够深入,我后来后了别人写的博客后觉得人家的确实写得好, 也学到了不少东西,对以前的问题有深的领悟了,于是准备结合这些博客和文章再稍微深入一点讲讲这些问题.这些指针的问题是C语言中的基础与关键 而且一旦出现这些问题,不太好找bug的来源,有时候不得不借助反汇编. 参考文章: http://c.biancheng.net/cpp/html/476.html       C语言指针数组和数组指针 http://blog.csdn.ne

动态数组使用

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int i; 7 int n; //用于记录输入的整数的个数 8 int *p; //用于指向动态数组的存储空间 9 int sum=0,average; //用于记录输入的整数的和与平均值 10 11 scanf("%d",&n);//输入要输入的整数的个数 n 12 13 p=calloc(n,sizeof(int)); //动

c++ -- 动态数组

一.关于数组的使用,有几个特殊的地方需要注意: 1.一维数组名可当做指针 具体应用:一维数组/二维数组的传参(参见博客“c++ --二维数组参数传递http://www.cnblogs.com/cygalaxy/p/6963789.html”) 2.动态数组 具体应用:根据实际需要为数组开辟具体大小. int *p; //声明动态数组p为全局变量,在函数内确定实际长度 int main() { int a=5; p=new int(a*sizeof(int)); //为动态数组p开辟5个int元

Java程序猿学习C++之数组和动态数组

数组: #include <iostream> using namespace std; //模板函数 template <class T> void dump(T val) { cout << ">>>>" << __FUNCTION__ << endl;//内置的宏,打印当前函数的名字 cout << sizeof(val) << ":" <<

动态数组vector

动态数组 动态数组可以实现长度的自由变化,但是通过vector的默认值可以基本判断所谓动态数组实际上还是一个普通数组,传递一个参数确定数组长度,如果没有传递参数,程序中其实默认进行设定.如果插入数据之后超过了已有长度,则在内部进行了一个创建第三方的过程,将现在的数组保存起来,然后再次创建一个新的长度的数组,然后根据插入值进行重新整合. 笔者并未看过源码,只是按照功能试着进行实现. 1.array.h 1 #pragma once 2 3 #include <iostream> 4 using

Java程序员学习C++之数组和动态数组

数组: #include <iostream> using namespace std; //模板函数 template <class T> void dump(T val) { cout << ">>>>" << __FUNCTION__ << endl;//内置的宏,打印当前函数的名字 cout << sizeof(val) << ":" <<

int[]里数的个数怎么由输入决定?-----动态数组。

java中如何创建动态数组?(摘自百度知道) Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayList作为Java动态数组的创建以及用法. 1.语法:add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度.ArrayList的下标是从0开始.2.示例代码import java.util.ArrayLis