补充知识:
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;
}