# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct ARR
{
int * pbase; //数据域
int len; //数组长度
int cnt; //有效个数
}Arr,*parr;
void init(parr arr,int lengh); //创建数组
bool empty(parr arr); //判空
bool full(parr arr); //判满
void show(parr arr); //输出
bool append(parr arr,int val); //追加
bool insert(parr arr,int pos,int val); //插入
bool deletearr(parr arr,int pos,int *val); //删除
void inversion(parr arr); //倒置
void sortarr(parr arr); //排序
int main (void)
{
parr arr;
arr = (parr)malloc(sizeof(Arr)); //为指针分配空间
int val;
init(arr,6);
show(arr);
append(arr,1);
append(arr,2);
append(arr,3);
append(arr,4);
if (deletearr(arr,1,&val))
{
printf ("删除成功\n");
printf ("您删除的元素是:%d\n",val);
}
else
printf ("删除失败");
show(arr);
inversion(arr);
printf ("倒置后的数字内容是:\n");
show(arr);
sortarr(arr);
show(arr);
return 0;
}
void init(parr arr,int lengh)
{
arr->pbase = (int *)malloc(sizeof(int)*lengh); //为数组分配空间
if (arr->pbase == NULL)
exit(-1);
arr->len = lengh;
arr->cnt = 0;
return;
}
bool empty(parr arr)
{
if (0 == arr->cnt)
return true;
else
return false;
}
bool full(parr arr)
{
if (arr->cnt == arr->len)
return true;
else
return false;
}
void show(parr arr)
{
int i;
if (empty(arr))
printf ("数组为空\n");
else
{
for (i=0;i<arr->cnt;++i)
printf ("%d ",arr->pbase[i]);
printf ("\n");
}
}
bool append(parr arr,int val)
{
if (full(arr))
return false;
else
{
arr->pbase[arr->cnt] = val;
++(arr->cnt);
return true;
}
}
bool insert(parr arr,int pos,int val)
{
int i;
if (full(arr))
return false;
if (pos<1 || pos>arr->cnt+1)
return false;
for (i=arr->cnt+1;i >= pos-1;--i) //指定位置之后的元素后移一位
{
arr->pbase[i+1] = arr->pbase[i];
}
arr->pbase[pos-1] = val;
++arr->cnt;
return true;
}
bool deletearr(parr arr,int pos,int *val)
{
int i;
if (empty(arr))
return false;
if (pos<1 || pos>arr->cnt)
return false;
*val = arr->pbase[pos-1];
for (i=pos;i<arr->cnt;++i) //指定位置之后的元素前移一位
arr->pbase[i-1] = arr->pbase[i];
--arr->cnt;
return true;
}
void inversion(parr arr)
{
int i=0;
int j = arr->cnt-1;
int t;
while(i<j)
{
t = arr->pbase[i];
arr->pbase[i] = arr->pbase[j];
arr->pbase[j] = t;
++i;
--j;
}
return;
}
void sortarr(parr arr)
{
int i,j,t;
for (i=0;i<arr->cnt-1;++i)
{
for (j=i+1;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;
}
}
}
}