#include <stdio.h>
#include <string.h>
#define DEFAULT_SIZE 1024
//根据内存使用大小而定,每1块4k,int为4个b,故取1024个int位置
typedef struct Array
{
int length;
int size;
int* pData;
}Array;
//初始化
void init(Array &arr)
{
arr.length = 0;
arr.size = DEFAULT_SIZE;
arr.pData = new int[arr.size];
}
//删除
void destroy(Array &arr)
{
delete[] arr.pData;
arr.length = 0;
arr.size = 0;
}
//扩展内存
void expend(Array &arr)
{
int osize = arr.size;
int *opData = arr.pData;
arr.size *= 2;
arr.pData = new int[arr.size];
memcpy(arr.pData, opData, osize * sizeof(int));//复制原数组中的数据
delete[] opData;
}
//获取数组长度
int getLength(Array &arr)
{
return arr.length;
}
//插入
void insert(Array &arr, int index, int value)
{
if(index == -1)
{
index = arr.length;
}
if(index >= 0 && index < arr.length)
{
memcpy(arr.pData + index + 1, arr.pData + index, (arr.length - index) * sizeof(int));
*(arr.pData + index) = value;
}
arr.length ++;
}
//移除
void remove(Array &arr, int index)
{
if(index >= 0 && index < arr.length)
{
memcpy(arr.pData + index, arr.pData + index + 1, (arr.length -index - 1) * sizeof(int));
arr.length--;
}
}
//get
int get(Array &arr, int index)
{
int value = 0;
if(index >= 0 && index < arr.length)
{
value = *(arr.pData + index);
}
return value;
}
//set
void set(Array &arr, int index, int value)
{
if(index >= 0 && index < arr.length)
{
*(arr.pData + index) = value;
}
}
//find
int find(Array &arr, int value)
{
int pos = -1;
for(int i = 0; i < arr.length; i++)
{
if(*(arr.pData + i) == value)
{
pos = i;
break;
}
}
return pos;
}
//getPrev
getPrev(Array &arr, int index)
{
return get(arr, index - 1);
}
//getNext
getNext(Array &arr, int index)
{
return get(arr, index + 1);
}
打印output
void output(Array &arr)
{
if(arr.length != 0)
{
for(int i = 0; i < arr.length; i++)
{
printf("%d ", *(arr.pData + i));
}
}
printf("\n");
}
测试用例
int main()
{
Array arr;
init(arr);
printf("%d, %d\n", arr.length, arr.size);
expend(arr);
printf("%d, %d\n", arr.length, arr.size);
insert(arr, 0, 1);
insert(arr, 0, 2);
insert(arr, 0, 3);
insert(arr, -1, 10);
insert(arr, 4, 8);
insert(arr, 2, 5);
printf("%d, %d\n", arr.length, arr.size);
output(arr);
remove(arr, 0);
remove(arr, arr.length-1);
remove(arr, 2);
output(arr);
printf("%d, %d, %d, %d", getPrev(arr, 0), getNext(arr, 1), find(arr, 5), get(arr, 1));
destroy(arr);
printf("\n%d, %d\n", arr.length, arr.size);
return 0;
}
// 0, 1024
// 0, 2048
// 6, 2048
// 3 2 5 1 10 8
// 2 5 10
// 0, 10, 1, 5
// 0, 0