c语言通过指针完成对数组的扩充、插值、删除、反转、排序等,实现java的ArrayList操作

c语言指针实现java的ArrayList操作

在学习数据结构的同时进行实践,使用指针的方式对数组进行操作,最终完成java中类似ArrayList的操作方法。

#include<stdio.h>
#include <malloc.h>
#include<stdlib.h>

struct data
{
	int* pst;
	int lent;
	int cnt;
};

void ini_arr(struct data* pst,int length);
bool is_empty(struct data* pst);
bool is_full(struct data* pst);

void show_arr(struct data* pst);
bool append_arr(struct data* pst,int val);
bool insert_arr(struct data* pst, int val,int pos);
bool delete_arr(struct data* pst, int pos);
int get(struct data* pst, int pos);
void sort_arr(struct data* pst);
void inversion_arr(struct data* pst);


int main() {
	//printf("hello world");
	struct data pst;
	int len = 6;//length of arr
	int g = 3;

	ini_arr(&pst,len);
	append_arr(&pst, 1);
	append_arr(&pst, 2);
	append_arr(&pst, 5);
	append_arr(&pst, 6);
	insert_arr(&pst,3,1);
	show_arr(&pst);

	printf("删除2元素后的数组为:\n");
	delete_arr(&pst,2);
	show_arr(&pst);

	int i = get(&pst,g);
	printf("得到第%d个值为:%d",g,i);

	inversion_arr(&pst);
	printf("反转后的数组为:\n");
	show_arr(&pst);

	sort_arr(&pst);
	printf("排序后的数组为:\n");
	show_arr(&pst);

	return 0;
}

void ini_arr(struct data* pst,int length) {
	 pst->pst = (int*)malloc(sizeof(int)*length);
	 if (pst->pst == NULL)
	 {
		 printf("初始化失败!\n");
		 exit(-1);
	 }
	 else
	 {
		 pst->cnt = 0;
		 pst->lent = length;
	 }
	 return;
}
bool is_empty(struct data* pst) {
	if (pst->cnt == 0)
		return true;
	else
		return false;

}
bool is_full(struct data* pst)
{
	if (pst->cnt == pst->lent)
		return true;
	else
		return false;
}

void show_arr(struct data* pst)
{
	if (is_empty(pst))
	{
		printf("数组为空!\n");
	}
	else
	{
		for (int i = 0; i < pst->cnt; ++i) {
			printf("%d ",pst->pst[i]);
		}
		printf("\n");
	}
	return;
}
bool append_arr(struct data* pst,int val) 
{
	if(is_full(pst))
	{
		printf("数组已满!\n");
		return false;
	}
	else
	{
		pst->pst[pst->cnt] = val;
		(pst->cnt)++;
		return true;
	}
}
bool insert_arr(struct data* pst, int val, int pos)
{
	if (is_full(pst))
	{
		printf("数组已满\n");
		return false;
	}
	else if(pos>pst->lent||pos<1)
	{
		printf("插入位置超出数组的大小!\n");
		return false;
	}
	else
	{
		for (int i = pst->cnt; i > pos-1; --i)
		{
			pst->pst[i] = pst->pst[i - 1];
		}
		pst->pst[pos-1] = val;
		pst->cnt++;
		return true;
	}
}
bool delete_arr(struct data* pst, int pos) 
{
	if (is_empty(pst)){
		printf("数组为空!\n");
	    return false;
	}
	else if (pos>pst->cnt)
	{
		printf("超出数组数据大小\n");
		return false;
	}
	else
	{
		for (int i = pos - 1; i < pst->cnt - 1; ++i) {
			pst->pst[i] = pst->pst[i + 1];
		}
		pst->cnt--;
		return true;
	}
}
int get(struct data* pst, int pos)
{
	if (pos > pst->cnt) {
		printf("超出数组数据大小\n");
		exit(-1);
	}
	else
	{
		int i = pst->pst[pos - 1];
		return i;
	}
}

//冒泡方式实现
void sort_arr(struct data* pst)
{
	int i, j,c;
	for (i = 0; i < pst->cnt; ++i)
	{
		for (j = i+1; j < pst->cnt; ++j)
		{
			if (pst->pst[i] > pst->pst[j])
			{
				c = pst->pst[i];
				pst->pst[i] = pst->pst[j];
				pst->pst[j] = c;
			}
		}
	}
	return;
}

void inversion_arr(struct data* pst)
{
	int i = 0;
	int j = pst->cnt - 1;
	int c;
	while (i < j)
	{
		c = pst->pst[i];
		pst->pst[i] = pst->pst[j];
		pst->pst[j] = c;
		++i;
		--j;
	}
	return;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一维数据数据增强算法是指通过对原始一维数据进行一系列变换和操作,生成新的数据样本,以扩充数据集的大小和多样性,从而提高模型的泛化能力和鲁棒性。以下是一些常见的一维数据增强算法: 1. 平移:将一维数据沿着时间轴或空间轴进行平移,可以通过在数据序列中添加或删除元素来实现。这可以模拟不同时间或位置下的数据变化。 2. 缩放:通过对一维数据进行放大或缩小操作,改变数据的振幅或幅度范围。可以通过线性插值插值算法来实现。 3. 旋转:将一维数据进行旋转操作,可以改变数据的相位或周期性。可以通过循环移位或旋转算法来实现。 4. 噪声添加:向一维数据中添加随机噪声,可以模拟真实世界中的噪声干扰。常见的噪声类型包括高斯噪声、均匀噪声等。 5. 数据截断:将一维数据进行截断操作,可以选择保留数据序列的前部分或后部分,以改变数据的长度或时间范围。 6. 数据翻转:将一维数据进行翻转操作,可以改变数据的方向或顺序。可以通过反转数据序列的元素来实现。 7. 数据插值:通过在一维数据中插入新的数据点,可以增加数据的密度和平滑度。常见的插值方法包括线性插值、样条插值等。 8. 数据剪裁:将一维数据进行剪裁操作,可以选择保留数据序列的某个子区间,以改变数据的时间范围或频率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值