数组及其相关操作实现

#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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值