#include<stdio.h>
//#include<stdlib.h>
#include<malloc.h>
/*--------代码写完了记得存笔记----------*/
//结构体函数调用架构
//第一阶段主函数,初始化,输出,判断数组是否为空,判断数组是否满了
//第二阶段追加元素到数组当中,插入,删除,倒置,排序
struct Arr
{
int *pbase;
int cnt;
int len;
};
bool append_array(struct Arr *arr,int val); //追加一个值到数组的最后,需要参数,追加值,数组首地址
void show_array(struct Arr *arr); //输出需要首地址
bool is_empty(struct Arr *arr); //判断数组是否为空
bool is_full(struct Arr *arr); //判断数组是否满了
void initial_array(struct Arr *arr,int length); //初始化
bool insert_array(struct Arr *arr,int pos,int val); //插入
bool delete_array(struct Arr *arr,int pos,int *val); //删除,要求返回被删除的数值
void inversion(struct Arr *arr);
void sort_array(struct Arr *arr);
void main()
{
int val;
struct Arr p; //先定义主函数里的结构体变量
initial_array(&p, 10);
append_array(&p, 10);
append_array(&p, 20);
append_array(&p, 30);
append_array(&p, 40);
append_array(&p, 50);
show_array(&p);
//if (append_array(&p, 6))
//{
// show_array(&p);
// printf("追加成功\n");
//}
//else
//{
// printf("追加失败\n");
// show_array(&p);
//}
//if (insert_array(&p, 3, 666)) //从第三个开始插
//{
// show_array(&p);
// printf("插入成功\n");
//}
//else
//{
// printf("插入失败\n");
// show_array(&p);
//}
//if (delete_array(&p, 3, &val))
//{
// show_array(&p);
// printf("删除成功\n");
// printf("删除的元素是=%d",val);
//}
//else
//{
// printf("删除失败\n");
// show_array(&p);
//}
inversion(&p);
show_array(&p);
sort_array(&p);
show_array(&p);
}
void initial_array(struct Arr *arr,int len)
{
arr->pbase = (int *)malloc(sizeof(int)*len);
if (NULL == arr->pbase)
printf("内存分配失败\n");
else
{
arr->len = len;
arr->cnt = 0;
}
}
bool append_array(struct Arr *arr, int val)
{
if(is_full(arr))
printf("数组已满\n");
else
{
arr->pbase[arr->cnt] = val;
arr->cnt++;
}
return true;
}
bool insert_array(struct Arr *arr, int pos, int val)
{
for (int i = arr->cnt - 1; i < pos; i--)
arr->pbase[i+1] = arr->pbase[i]; //这里容易绕
arr->pbase[pos-1] = val;
arr->cnt++;
return true;
}
bool delete_array(struct Arr *arr, int pos, int *val)
{
*val = arr->pbase[pos - 1];
for (int i = pos - 1; i < arr->cnt - 1; i++)
arr->pbase[i] = arr->pbase[i + 1];
arr->cnt--;
return true;
}
void inversion(struct Arr *arr)
{
int t=0,i=0, j=arr->cnt-1;
while (i<j)
{
t = arr->pbase[i];
arr->pbase[i] = arr->pbase[j];
arr->pbase[j] = t;
i++;
j--;
}
}
void sort_array(struct Arr *arr)
{
int i, j, t;
for (i = 0; i < arr->cnt; i++)
{
for (j = i; j < arr->cnt;j++)
{
if (arr->pbase[i] > arr->pbase[j])
{
t = arr->pbase[i];
arr->pbase[i] = arr->pbase[j];
arr->pbase[j] = t;
}
}
}
}
void show_array(struct Arr *arr)
{
if (is_empty(arr))
printf("数组没有元素\n");
else
{
for (int i=0; i < arr->cnt; i++)
{
printf("第%d个数组元素是=",i+1);
printf("%d\n",arr->pbase[i]);
}
}
}
bool is_empty(struct Arr *arr)
{
if (arr->cnt == 0)
return true;
else
return false;
}
bool is_full(struct Arr *arr)
{
if (arr->cnt == arr->len)
return true;
else
return false;
}
评论0