对数组的一些操作

对数组的一些基本操作, 包括:
初始化 ,追加 插入 删除 元素, 排序等。
因为 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"); }


对数组的一些操作
文章图片

【对数组的一些操作】

    推荐阅读