include <stdio.h>
include <malloc.h>
include <stdlib.h>//包含了exit函数
include <windows.h>
//定义了一个数据类型,未分配存储空间
struct Arr
{
int * pBase;//存储数组第一个元素的地址
int len;//当前数组最大容纳的元素个数
int cet;//当前数组的有效个数
};
void init_arr(struct Arr * pArr, int len);//初始化
void show_arr(struct Arr * pArr);//输出
bool is_empty(struct Arr * pArr);//判断数组是否为空
bool is_full(struct Arr * pArr);//判断数组是否为满
void append_arr(struct Arr * pArr, int val);//追加元素
bool insert_arr(struct Arr * pArr, int pos, int val);//插入
bool mgwf_arr(struct Arr * pArr);//元素赋值
bool delete_arr(struct Arr * pArr,int pos);//删除
void get(struct Arr * pArr,int val);//获取下标
void stor_arr(struct Arr * pArr);//排序大到小
void inversion_arr(struct Arr * pArr);//倒置
int main(void)
{
struct Arr arr;
init_arr(&arr,3);
show_arr(&arr);//输出
mgwf_arr(&arr);//赋值
show_arr(&arr);//输出
append_arr(&arr, 6);//追加元素
show_arr(&arr);//输出
insert_arr(&arr,1,10);//插入元素
show_arr(&arr);//输出
delete_arr(&arr, 1);//删除元素
show_arr(&arr);//输出
get(&arr,1);//获取下标
stor_arr(&arr);//从大到小排序
show_arr(&arr);//输出
inversion_arr(&arr);//数组元素倒置
show_arr(&arr);//输出
return 0;
}
//数组元素倒置
void inversion_arr(struct Arr * pArr)
{
int i,q,t;
for(i = 0, t = pArr->cet-1; i!=t || i<t; ++i,--t)
{
q = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[t];
pArr->pBase[t] = q;
}
return;
}
//从大到小排序
void stor_arr(struct Arr * pArr)
{
int i,q,p;
for(i = 0; i < pArr->cet; ++i)
{
for(q = i; q < pArr->cet; ++q)
{
if(pArr->pBase[i] < pArr->pBase[q+1])
{
p = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[q+1];
pArr->pBase[q+1] = p;
}
}
}
return;
}
//获取值为val的下标
void get(struct Arr * pArr,int val)
{
int i;
if(is_empty(pArr))
{
printf("数组为空,获取下标失败!\n");
return;
}
printf("数值%d的数组下标为:", val);
for(i = 0; i < pArr->cet; ++i)
{
if(val == pArr->pBase[i])
printf("%d,", i);
}
printf("\n");
return;
}
//删除第pos个元素
bool delete_arr(struct Arr * pArr, int pos)
{
int val;//用于保存删除元素的值
int i;
if(pos < 1 || pos > pArr->cet)
return false;
val = pArr->pBase[pos-1];
for(i = pos-1; i < pArr->cet-1; ++i)
pArr->pBase[i] = pArr->pBase [i+1];
pArr->cet--;
printf("删除的元素值为:%d\n", val);
return true;
}
//插入元素,在pos位置插入一个元素
bool insert_arr(struct Arr * pArr, int pos, int val)
{
int i;
if(is_full(pArr))
return false;
if(pArr->cet != NULL)
{
if(pos<1 || pos>pArr->cet+1)
return false;
}
for(i = pArr->cet+1; i >= pos; --i)
{
pArr->pBase[i] = pArr->pBase[i-1];
}
pArr->pBase[pos] = val;
pArr->cet ++;
return true;
}
//元素赋值
bool mgwf_arr(struct Arr * pArr)
{
int i;
int q;
int val;
if(is_full(pArr))
{
printf("数组已满,数组赋值失败!\n");
return false;
}
if(pArr->cet < pArr->len)
{
for(i = pArr->cet; i < pArr->len; ++i)
{
printf("请输入元素值:");
scanf("%d", &val);
pArr->pBase[i] = val;
pArr->cet++;
if(pArr->cet != pArr->len)
{
printf("终止赋值请输入0!\n");
scanf("%d", &q);
}
if(q == 0)
return true;
}
}
return true;
}
//初始化
void init_arr(struct Arr *pArr,int len)
{
pArr->pBase = (int *)malloc(sizeof(int) * len);
if(NULL == pArr->pBase)
{
printf("内存分配失败!\n");
exit(-1);//终止整个函数
}
else
{
pArr->len = len;
pArr->cet = 0;
}
return;
}
//输出
void show_arr(struct Arr * pArr)
{
int i;
if(is_empty(pArr))
{
printf("数组为空\n");
}
else
for(i = 0; i < pArr->cet; ++i)
{
printf("数组第%d个元素为:%d\n", i+1, pArr->pBase[i]);
}
}
//判断数组是否为空
bool is_empty(struct Arr * pArr)
{
if(NULL == pArr->cet)
{
return true;//返回的值为真
}
else
{
return false;//返回的值为假
}
}
//判断数组是否是满
bool is_full(struct Arr * pArr)
{
if(pArr->cet == pArr->len)
return true;
else
return false;
}
//追加元素
void append_arr(struct Arr * pArr, int val)
{
int t;
int i;
int q;
if(is_full(pArr))
{
printf("元素已满,追加失败!\n");
printf("如需要继续追加元素,请输入追加元素个数!否则请输入0!\n");
printf("追加元素个数为: ");
scanf("%d",&i);
if(i != 0)
{
pArr->len +=i;
for(pArr->cet; pArr->cet < pArr->len; )
{
printf("请输入追加元素值: ");
scanf("%d", &t);
pArr->pBase [pArr->cet] = t;
++pArr->cet;
printf("停止追加元素请输入0!\n");
printf("输入数值为: ");
scanf("%d", &q);
printf("\n");
if(q == 0)
return;
}
printf("追加元素成功\n");
}
else
{
printf("末追加元素!\n");
}
}
else
{
for(pArr->cet; pArr->cet < pArr->len; )
{
printf("请输入追加元素值: ");
scanf("%d", &t);
pArr->pBase [pArr->cet] = t;
++pArr->cet;
printf("停止追加元素请输入0!\n");
printf("输入数值为: ");
scanf("%d", &q);
printf("\n");
if(q == 0)
return;
}
printf("追加元素成功\n");
}
return;
}