c++实现数组的追加;插入;删除;数组是否满;数组是否空;排序;倒置

补充知识:
1.数组的目的是两个目的一个是:
存储不一样,操作就不一样
泛型达到的效果就是:存储不一样操作也一样
2.结构体变量之间可以相互赋值

#include<iostream>
using namespace std;
struct Arr
{
	int* pbase;//首地址
	int len;//数组所能容纳的最大元素的个数
	int cnt;//当前数组有效元素的个数
	//int increment;//自动增长的因子

};//结构体数据类型-定义一个数据类型,该数据类型的名字叫做(struct arr),该数据类型有三个成员
// int a[10];
//int *parr=(int*)malloc(sizeof(int)*len)
//a.add(10)
//a.add(20)
//动态内存扩充
//末尾添加append

实现数组的追加;插入;删除;数组是否满;数组是否空;排序;倒置
bool append_arr(struct Arr* arrs, int val);//追加
bool insert_arr(struct Arr* arrs,int pos,int val);
bool delete_arr(struct Arr* arrs, int pos, int pval);
int get_();
bool is_emptys(struct Arr arr);
bool is_full(struct Arr
arr);
void sort_arr();
void show_arr(struct Arr &arrs);
void inversion_arr();
void init_arr(struct Arr
arrs, int length);
主函数

int main()
{
	//struct Arr* arr;
	struct Arr arrs;
	int length = 6;
	int val;
	init_arr(&arrs,length);
	printf("%d\n", arrs.len);
	append_arr(&arrs, 1);
	append_arr(&arrs, 2);
	append_arr(&arrs, 3);
	append_arr(&arrs, 4);
	append_arr(&arrs, 5);
	//append_arr(&arrs, 6);
	int pos = 3;
	int values = 88;
	if (insert_arr(&arrs, pos, values))
	{
		printf("在第%d个位置成功添加元素%d:\n  ", pos, 88);
	}
	else
	{
		cout << "添加失败" << endl;
	}
	if (delete_arr(&arrs, pos, &val))
	{
		printf("删除成功第%d个元素: ", pos);
		printf("删除陈工的元素%d\n",val);
	}
	else
	{
		printf("删除失败");
	}
	

	show_arr(arrs);

	return 0;
}

判断数组是否为空

bool is_emptys(struct Arr* arrs)
{
	if (arrs->cnt==0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

展示数组中所有元素

void show_arr(struct Arr& arr)
{
	//经典分析:void show_arr(struct Arr* arr,int length)
	//那么arr指针变量指向结构体arr中的pabse变量:arr->pabase//类型是int*
	//&arr表示的是去指针变量arr的地址,指针变量为int 型号,并不是struct arr*的指针变量

	if (is_emptys(&arr))
	{
		cout << "数组为空" << endl;
	}
	else
	{ 
		for (int i = 0;i < arr.cnt;i++)
		{
			cout << "数组的值大小为:" << *(arr.pbase) << " " << "地址为: " << arr.pbase << endl;
			arr.pbase++;
		}
	
	}
	
}

//数组初始化

void init_arr(struct Arr* arrs,int length)
{
	arrs->pbase = (int*)malloc(sizeof(int) * length);  **//相当于arrs指针变量所指向结构体变量中的pbase**
	if (NULL == arrs->pbase)
	{
		printf("动态内存分配失败");
		exit(-1);//终止整个程序
	}
	else
	{
		arrs->len = length;
		arrs->cnt = 0;
	}
	return;//函数终止

}

数组追加

bool append_arr(struct Arr* arrs, int val)
{
	if (is_full(arrs))
	{
		return false;
	}
	else
	{
		arrs->pbase[arrs->cnt] = val;
		(arrs->cnt)++;
		return true;
	}
}

判断数组是否满

bool is_full(struct Arr* arr)
{
	if (arr->cnt == arr->len)
	{
		printf("%s\n", "数组已满了");
		return true;
	}
	else
	{
		return false;
	}
}

数组插入解题思路

//在添加元素的时候
//确定位置必须>=1,并且小于cnt+1,说白了5个数字,不可能在第七个位置添加
//确定在第4个位置添加 a[5]=a[4]
//那么从if(i=有效长度开始递减;i>=pos;i++
//最后a[pos-1]=插入的值

插入数组

bool insert_arr(struct Arr* arrs, int pos, int val)
{
	if (is_full(arrs))
	{
		return false;
	}
	if (pos<1 || pos>arrs->cnt + 1)
		return false;
	//在第3个位置插入数字8,那么索引2,往后的数字全部要偏移  
	for (int i = arrs->cnt;i >=pos;i--)
	{
		arrs->pbase[i] = arrs->pbase[i-1];
			
	}
	arrs->pbase[pos - 1] = val;
	(arrs->cnt)++;

	
}

删除数组中指定位置删除某个元素解题思路

//在删除元素
//确定位置 位置必须大于1,小于等于有效长度个数
// 确定删除位置第4个
//删除元素,也就说a[b-1]的位置=a[b]的位置替代a[3]=a[4]
//那么其中位置固定if(i=pos-1;i<cnt;i++)
//a[pos-1]取出

删除数组中指定位置删除某个元素

bool delete_arr(struct Arr* arrs, int pos, int* pval)
{
	if (is_emptys(arrs))
	{
		cout << "数组为空" << endl;
	}
	*pval=arrs->pbase[pos - 1];
	if (pos<1 || pos>arrs->cnt)
		return false;
	else
	{
		for (int i = pos-1;i < arrs->cnt;i++)
		{
			arrs->pbase[i] = arrs->pbase[i+1];
		}
		(arrs->cnt)--;

	}
	return true;
}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个示例代码,实现了主函数定义数组、自定义函数实现数组的输入、输出、排序插入: ```c++ #include<iostream> using namespace std; void input(int arr[], int n); // 输入函数声明 void output(int arr[], int n); // 输出函数声明 void sort(int arr[], int n); // 排序函数声明 void insert(int arr[], int& n, int pos, int val); // 插入函数声明 int main(){ const int MAXSIZE = 100; int arr[MAXSIZE]; int n; // 数组元素个数 cout << "请输入数组的元素个数:"; cin >> n; input(arr, n); // 调用输入函数 output(arr, n); // 调用输出函数 sort(arr, n); // 调用排序函数 output(arr, n); // 再次输出,查看排序结果 int pos, val; // 插入位置和值 cout << "请输入要插入的位置和值(用格隔开):"; cin >> pos >> val; insert(arr, n, pos, val); // 调用插入函数 output(arr, n); // 再次输出,查看插入结果 return 0; } void input(int arr[], int n){ cout << "请依次输入数组的元素:"; for(int i = 0; i < n; i++){ cin >> arr[i]; } } void output(int arr[], int n){ cout << "数组元素为:"; for(int i = 0; i < n; i++){ cout << arr[i] << " "; } cout << endl; } void sort(int arr[], int n){ for(int i = 0; i < n - 1; i++){ for(int j = 0; j < n - i - 1; j++){ if(arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } void insert(int arr[], int& n, int pos, int val){ if(pos < 0 || pos >= n){ // 判断插入位置是否合法 cout << "插入位置不合法!" << endl; return; } for(int i = n - 1; i >= pos; i--){ // 元素后移 arr[i + 1] = arr[i]; } arr[pos] = val; // 插入元素 n++; // 数组元素个数加一 } ``` 在这个示例代码中: - 主函数定义了一个长度为100的数组,以及数组元素个数n。 - 调用了自定义输入函数input、输出函数output、排序函数sort、插入函数insert。 - 输入函数input使用for循环依次输入数组的元素。 - 输出函数output使用for循环输出数组的元素。 - 排序函数sort使用冒泡排序算法对数组进行排序。 - 插入函数insert先判断插入位置是否合法,然后使用for循环将插入位置之后的元素全部后移一位,最后将要插入的元素插入到指定位置,并且数组元素个数n加一。 你可以根据自己的需要修改函数实现,例如使用其他排序算法、插入方式等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值