#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct Arr
{
int * Base;//存储数组第一个元素的地址
int len ;//数组长度
int size; //数组当前长度
};
void init_arr(struct Arr * pArr,int length);
bool append_arr(struct Arr * pArr,int val); //追加val值
bool insert_arr(struct Arr * pArr,int pos,int *pVal);
bool delete_arr(struct Arr * pArr,int pos,int *pVal);
bool is_empty(struct Arr * pArr);
bool is_full(struct Arr * pArr);
void sort_arr(struct Arr * pArr);
void show_arr(struct Arr * pArr);
void main(void)
{
int i;
int len;
int val;//加入数据的值
int val_ins;//插入数据的值
int pos; //插入数据的位置
int del;//返回删除数据的值
struct Arr arr;
while(1){
printf("初始化数组请输入 1\n");
printf("加入数据请输入 2\n");
printf("插入数据请输入 3\n");
printf("删除数据请输入 4\n");
printf("给数组排序请输入 5\n");
scanf("%d",&i);
printf("\n\n\n");
if(1==i){
printf("请输入要创建的数组长度\n\n");
scanf("%d",&len);
init_arr(&arr,len);
}
else if(2==i){
printf("请输入要加入数据的值\n\n\n");
scanf("%d",&val);
append_arr(&arr,val);
printf("当前数组中的内容为\n\n\n");
show_arr(&arr);
printf("\n\n\n");
}
else if(3==i){
printf("请输入要插入数据的位置\n\n");
scanf("%d",&pos);
printf("请输入要插入数据的值\n\n");
scanf("%d",&val_ins);
insert_arr(&arr,pos,&val_ins);
printf("当前数组中的内容为\n\n\n");
show_arr(&arr);
printf("\n\n\n");
}
else if(4==i){
printf("请输入要删除数据的位置\n\n\n");
scanf("%d",&pos);
delete_arr(&arr,pos,&del);
printf("当前数组中的内容为\n\n\n");
show_arr(&arr);
printf("删除的数据为%d\n",del);
printf("\n\n\n");
}
else if(5==i)
{
sort_arr(&arr);
printf("当前数据为\n");
show_arr(&arr);
}
else {
printf("输入有误 请重新输入\n");
}
}
}
void init_arr(struct Arr * pArr,int length)
{
pArr->Base=(int*)malloc(sizeof(int)*length);
if(pArr->Base==NULL)
{ printf("\n\n\n");
printf("分配失败\n");
exit(-1); //终止程序
}
else
{
pArr->len=length;
pArr->size=0; //初始长度为0
printf("\n\n\n");
printf("分配成功\n\n\n");
}
}
void show_arr(struct Arr * pArr) //输出函数
{
int i;
for(i=0;i<pArr->size;i++)
{
printf("%d ",pArr->Base[i]);
}
printf("\n");
}
bool append_arr(struct Arr * pArr,int val) //在数组末尾追加数据
{
if(pArr->size>=pArr->len)
{ printf("追加失败,超过数组大小\n");
return false;
}
else
{
pArr->Base[pArr->size]=val;
pArr->size++;
return true;
}
}
bool insert_arr(struct Arr * pArr,int pos,int *pVal) //在第pos位置处插入pval所指向的值 pos 从1开始
{
int i=0;
if(pArr->size>=pArr->len)
{
printf("数组已满,不能插入\n");
return false;
}
if(pos<1||pos>pArr->size)
{
printf("输入位置值非法\n");
return false;
}
for(i=pArr->size;i>=pos;i--)
{
pArr->Base[i]=pArr->Base[i-1];
}
pArr->Base[pos-1]=*pVal;
pArr->size++;
return true;
}
bool delete_arr(struct Arr * pArr,int pos,int *pVal) //删除第pos个位置上的值,并用 pval返回
{
if(pos<1||pos>pArr->size)
{
printf("输入值非法\n");
return false;
}
if(is_empty(pArr))
{
printf("无数据可删\n");
return false;
}
else
{
*pVal=pArr->Base[pos-1];
for(int i=pos;i<=pArr->size-1;i++)
{
pArr->Base[i-1]=pArr->Base[i];
}
pArr->size--;
printf("删除的元素为%d\n",*pVal);
return true;
}
}
bool is_empty(struct Arr * pArr)//判断数组是否为空
{
if(pArr->size==0)
return true;
else
return false;
}
bool is_full(struct Arr * pArr) //判断数组是否满
{
if(pArr->size==pArr->len)
{
printf("数组已满,请重新分配\n");
return true;
}
else return false;
}
void sort_arr(struct Arr * pArr) //给数组排序
{int i;
int temp; //保存临时数据
int j,k;
printf("请输入排序顺序\n");
printf("升序请输入 1\n");
printf("降序请输入 2\n");
scanf("%d",&i);
if(1==i)
{
for (j=0;j<pArr->size;++j)
{
for(k=j+1;k<pArr->size;++k)
{
if(pArr->Base[j]>pArr->Base[k])
{
temp=pArr->Base[j];
pArr->Base[j]=pArr->Base[k];
pArr->Base[k]=temp;
}
}
}
}
else if (2==i)
{
for (j=0;j<pArr->size;++j)
{
for(k=j+1;k<pArr->size;++k)
{
if(pArr->Base[j]<pArr->Base[k])
{
temp=pArr->Base[j];
pArr->Base[j]=pArr->Base[k];
pArr->Base[k]=temp;
}
}
}
}
else
{
printf("输入有误\n");
}
}