对数组的一些基本操作, 包括:
初始化 ,追加 插入 删除 元素, 排序等。
因为 c 语言中没有布尔类型, 所以在下面程序中用 0 表示 false, 1 表示true。
# include
#include typedef struct stu
{
int len;
// 数组长度
int*pBase;
// 数组第一个元素地址
int cnt;
// 数组中有效元素个数
} Stu;
// 函数声明
void init_arr(Stu * pArr, int length);
// 初始化数组
int is_Empty(Stu * pArr);
// 判断数组是否为空
void show_arr(Stu * pArr);
// 输出数组元素
int append_arr(Stu * pArr,int val);
// 向数组中追加元素
int inset_arr(Stu * pArr, int pos, int val);
//向数组中插入元素pos 从1开始
int delete_arr(Stu * pArr, int pos, int * pVal);
// 删除数组中某个元素
int is_full(Stu * pArr);
// 判断数组是否已满
void sort_arr(Stu * pArr);
// 排序(从小到大)
void inversion_arr(Stu * pArr);
// 倒置数组 int main(void)
{
Stu arr;
int val;
// val用来标记删除的元素。
init_arr(&arr, 6);
append_arr(&arr, 3);
append_arr(&arr, 5);
append_arr(&arr, 4);
append_arr(&arr, 1);
append_arr(&arr, 8);
show_arr(&arr);
inset_arr(&arr, 3, 99);
show_arr(&arr);
delete_arr(&arr, 3, &val);
show_arr(&arr);
sort_arr(&arr);
show_arr(&arr);
inversion_arr(&arr);
show_arr(&arr);
return 0;
}
// 初始化 数组,
void init_arr(Stu * pArr, int length)
{
pArr->pBase = (int *)malloc(sizeof(int) * length);
if (NULL != pArr->pBase)
{
pArr->cnt = 0;
pArr->len = length;
printf("建立数组成功, 初始化成功, 数组长度为%d\n", length);
}
else
{
printf("动态内存分配失败!\n");
exit(-1);
}
return;
}
// 判断数组是否为空
int is_Empty(Stu * pArr)
{
if(0 == pArr->cnt)
return 1;
else
return 0;
}
// 输出数组
void show_arr(Stu * pArr)
{
int i;
printf("当前数组为:\n");
if (0 == pArr->cnt)
{
printf("数组为空.\n");
}
else
{
for (i = 0;
i < pArr->cnt;
i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}
}
// 判断数组是否为满
int is_full(Stu * pArr)
{
if (pArr->len == pArr->cnt )
{
printf("该数组已满\n");
return 1;
}
else
return 0;
}
// 插入元素
int inset_arr(Stu * pArr, int pos, int val)
{
int i;
if (pos > pArr->cnt+1||pos < 0)
return 0;
for (i = pArr->cnt;
i >= pos-1;
i--)// cnt 表示数组长度,
{
pArr->pBase[i] = pArr->pBase[i-1];
}
pArr->pBase[pos-1] = val;
pArr->cnt++;
// 插入了一个元素之后 ,那么数组的元素个数加一。
printf("插入成功\n");
return 1;
}
// 追加
int append_arr(Stu * pArr,int val)
{
// 满时不追加
if (is_full(pArr))
return 0;
else
pArr->pBase[pArr->cnt] = val;
pArr->cnt++;
return 1;
}
// 删除
int delete_arr(Stu * pArr, int pos, int * pVal)
{
int i;
if (is_Empty(pArr))
return 0;
if (pos < 1 || pos > pArr->cnt)
return 0;
*pVal = pArr->pBase[pos-1];
// *pVal 保存的是删除的元素。
printf("您所要删除的元素是:%d\n", *pVal);
for (i = pos;
i <= pArr->cnt;
i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
printf("删除成功\n");
return 1;
}
// 冒泡
void sort_arr(Stu * pArr)
{
int i, j, t;
for (i = 0;
i cnt-1;
i++)
{
for (j = i+1;
j cnt;
j++)
{
if (pArr->pBase[i] < pArr->pBase[j])
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
}
}
}
printf("从大到小排序成功\n");
}
// 倒置
void inversion_arr(Stu * pArr)
{
int t, i = 0, j = pArr->cnt;
while (i < j)
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j-1];
pArr->pBase[j-1] = t;
i++;
j--;
}
printf("数组倒置成功\n");
}
文章图片
【对数组的一些操作】
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- C/C++|C/C++ basis 02
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转
- Qt实战|Qt+OpenCV联合开发(十四)--图像感兴趣区域(ROI)的提取
- Qt实战|Qt+OpenCV联合开发(十三)--通道分离与合并
- opencv|Qt+OpenCV联合开发(十六)--图像几何形状绘制
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- SNAT的MASQUERADE地址选择与端口选择
- IPTABLES的连接跟踪与NAT分析
- IPVS分析