您的位置:首页 > 其它

对数组的一些操作

2017-06-06 18:30 127 查看
对数组的一些基本操作, 包括:

初始化 ,追加 插入 删除 元素, 排序等。

因为 c 语言中没有布尔类型, 所以在下面程序中用 0 表示 false, 1 表示true。

# include <stdio.h>
#include <stdlib.h>

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 <pArr->cnt-1; i++)
{
for (j = i+1; j <pArr->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");
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: