#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h> //exit 函数需要
typedef struct arr
{
char* arr_name;
int len; //当前数组长度
int maxlen;
}*PARR,ARR; //PARR ==struct arr * , ARR==struct arr
void init_arr(PARR array, int length); //初始化数组
void show_arr(PARR array); //显示数组
bool is_empty(PARR array); // 判断是否空
bool is_full(PARR array); // 判断是否满
int get_arr(PARR array, int num); //获得小标下标为num 的数组内容
bool append_arr(PARR array, int num); //数组尾部追加一个元素
bool insert_arr(PARR arr, int x, int num); //x 为插入的数,num为插入为值的下标
bool delete_arr_num(PARR array, int num); //根据下标删除一个元素
bool delete_arr_x(PARR array, int x); //根据值删除一个一个元素
void sort_arr(PARR array); //排序小到大
void inversion_arrr(PARR array); // 倒叙排列
main()
{
struct arr array;
// 测试程序:
init_arr(&array, 10);
//append_arr(&array, 3);
//append_arr(&array, 2);
//append_arr(&array, 1);
//insert_arr(&array, 0, 3); // 前面前面为数,后面为序号
//sort_arr(&array);
//inversion_arrr(&array);
//delete_arr_num(&array, 0);
//delete_arr_x(&array, 3);
//get_arr(&array, 0);
//show_arr(&array);
}
//参数length 用户指定的数组长度
void init_arr(PARR ar, int length) {
ar->arr_name = malloc(sizeof(int));
if (ar->arr_name == NULL)
{
printf(" malloc memory error!!");
exit(-1);
}
else {
ar->maxlen = length;
ar->len = 0;
}
}
void show_arr(PARR ar) {
int i;
printf("array lenth is %d \n", ar->len);
printf("array: ");
if (is_empty(ar)) {
printf(" array is empty!!");
}
else
for (i = 0; i < ar->len; i++)
printf("%d ", ar->arr_name[i]);
}
bool is_empty(PARR ar)
{
if (ar->len == 0)
return true;
else
return false;
}
bool is_full(PARR ar) {
if (ar->len == ar->maxlen)
return true;
else
return false;
}
//x 为增加的数组元素值
bool append_arr(PARR ar, int x) {
bool app = false;
if (is_full(ar))
{
printf("array is full !");
}
else {
ar->arr_name[ar->len] = x;
ar->len++;
app = true;
}
return app;
}
int get_arr(PARR arr, int num) {
if (num > arr->len)
printf("the number is too big!");
else
return arr->arr_name[num];
//printf("array[%d] = %d ", num, arr->arr_name[num]);
}
bool insert_arr(PARR arr, int x, int num) {
bool ins = true;
int i;
if (num > arr->len) {
ins = false;
printf("number is too large !\n");
}
else if (num == (arr->len)) {
arr->arr_name[arr->len] = x;
arr->len += 1;
}
else {
for (i = (arr->len); i >= num; i--)
arr->arr_name[i] = arr->arr_name[i - 1];
arr->len += 1;
arr->arr_name[num] = x;
}
return ins;
}
bool delete_arr_num(PARR arr, int num) {
int i;
bool del = true;
if (is_empty(arr)) {
printf("array is empty!");
del = false;
}
else if (num > arr->len - 1) {
printf("number is too large !\n");
del = false;
}
else if (num == arr->len - 1)
arr->len -= 1;
else
for (i = num; i < arr->len - 1; i++)
arr->arr_name[i] = arr->arr_name[i + 1];
arr->len -= 1;
return del;
}
bool delete_arr_x(PARR arr, int x) {
bool del = true;
int i; //查找 循环查找x
int j; //循环删除x
for (i = 0; i < arr->len - 1; i++) {
if (x == arr->arr_name[i])
{
for (j = i; j < arr->len - 1; j++)
arr->arr_name[j] = arr->arr_name[j + 1];
arr->len -= 1;
}
else if (x == arr->arr_name[arr->len - 1])
arr->len -= 1;
else
del = false;
}
return del;
}
void sort_arr(PARR arr) {
int i, j = 0;
int temp;
for (i = 0; i < arr->len; i++)
for (j = i + 1; j < arr->len; j++)
if (arr->arr_name[i] > arr->arr_name[j])
{
temp = arr->arr_name[i];
arr->arr_name[i] = arr->arr_name[j];
arr->arr_name[j] = temp;
}
}
void inversion_arrr(PARR arr) {
int i = 0, j = arr->len - 1;
int temp;
while (i < j) {
temp = arr->arr_name[i];
arr->arr_name[i] = arr->arr_name[j];
arr->arr_name[j] = temp;
i++;
j--;
}
}