#include <stdio.h>
#include <malloc.h>
typedef struct SArr
{
//数组第一个元素的地址
int *pBase;
//数组能存放的最大元素个数
int length;
//有效元素的个数
int cnt;
} Arr;
//初始化数组
void init_arr(Arr *, int);
//数组末尾追加元素
bool append(Arr *, int);
//判读数组是否为空
bool is_empty(Arr *);
//判断数组是否已满
bool is_full(Arr *);
//添加元素
bool insert(Arr *, int, int);
//删除元素
bool deleteEle(Arr *, int, int *);
//数组反转
void reserve(Arr *);
//显示数组
void show_arr(Arr *);
int main()
{
Arr arr;
init_arr(&arr, 5);
append(&arr, 0);
append(&arr, 2);
insert(&arr, 7, 1);
insert(&arr, 1, 2);
insert(&arr, 2, 3);
insert(&arr, 2, 4);
insert(&arr, 3, 5);
show_arr(&arr);
int val;
deleteEle(&arr, 2, &val);
printf("你要删除的元素是%d\n", val);
show_arr(&arr);
reserve(&arr);
printf("反转后的数组为:");
show_arr(&arr);
return 0;
}
void init_arr(Arr *arr, int length)
{
//初始化数组的大小
arr->pBase = (int *)malloc(sizeof(int) * length);
if (NULL == arr->pBase)
{
printf("初始化数组失败\n");
}
else
{
//初始化数组中存的元素个数为0
arr->cnt = 0;
//初始化数组的长度
arr->length = length;
}
}
bool append(Arr *arr, int ele)
{
if (is_full(arr))
{
return false;
}
arr->pBase[arr->cnt] = ele;
arr->cnt++;
return true;
}
// index 插入元素位置的下标
bool insert(Arr *pArr, int index, int ele)
{
if (is_full(pArr))
{
return false;
}
//检查插入位置是否合法 索引不能为负数 不得跳跃式插入 比如数组中只有两个元素 不得插入到第四个位置
if (index < 0 || index > pArr->cnt)
{
printf("插入位置不合法!\n");
return false;
}
for (int i = pArr->cnt - 1; i >= index; i--)
{
pArr->pBase[i + 1] = pArr->pBase[i];
}
pArr->pBase[index] = ele;
pArr->cnt++;
}
bool is_empty(Arr *arr)
{
if (arr->cnt != 0)
{
return false;
}
else
{
return true;
}
}
bool is_full(Arr *arr)
{
if (arr->cnt != arr->length)
{
return false;
}
else
{
return true;
}
}
void show_arr(Arr *arr)
{
if (is_empty(arr))
{
printf("当前数组为空\n");
}
printf("数组中的元素==>");
for (int i = 0; i < arr->cnt; i++)
{
printf("%d\t", arr->pBase[i]);
}
printf("\n");
}
bool deleteEle(Arr *pArr, int index, int *pVal)
{
//检查索引的合法性
if (index < 0 || index > pArr->cnt - 1)
{
return false;
}
*pVal = pArr->pBase[index];
for (int i = index; i <= pArr->cnt - 1; i++)
{
pArr->pBase[i] = pArr->pBase[i + 1];
}
pArr->cnt--;
return true;
}
void reserve(Arr *pArr)
{
int i = 0;
int j = pArr->cnt - 1;
int temp;
while (i < j)
{
temp = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = temp;
i++;
j--;
}
}
C++实现一维数组
最新推荐文章于 2024-01-04 13:10:40 发布