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

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

#include
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
//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;
}

你可能感兴趣的:(c++(数据结构),c++)