#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>
//定义数据类型 array
typedef struct Array
{
int *arrpBase; //存储数组首元素的地址
int arrLength; //数组所能容纳最大元素个数
int arrAcount; //当前数组有效元素的个数
}Array;
//向外界提供的操作方法
void initializeArray(Array *p,int length); //初始化
bool appendArray(Array *p,int value); //追加
bool insertArray(Array *p,int postion, int value); //插入,参数postin从1开始
bool deleteArray(Array *p,int postion, int *pValue); //删除
int findArrValue(Array *p,int value); //查找
bool isEmpty(Array *p); //判断是否为空
bool isFull(Array *p); //是否已存满
void sortArray(Array *p); //排序
void showArray(Array *p); //显示
void inverArray(Array *p); //倒置
int main()
{
Array arr;
int devalue;
initializeArray(&arr,5);
appendArray(&arr,1);
appendArray(&arr,2);
appendArray(&arr,3);
appendArray(&arr,4);
appendArray(&arr,5);
showArray(&arr);
if(deleteArray(&arr,2,&devalue))
{
printf("Delete succeed!\n");
printf("The value delete of is %d\n",devalue);
}
else
{
printf("Delete failer!\n");
}
showArray(&arr);
if(findArrValue(&arr,5) != -1)
{
printf("find the value of %d index is %d\n",5,findArrValue(&arr,5));
}
return 0;
}
void initializeArray(Array *p,int length) //初始化数组
{
p->arrpBase = (int *)malloc(sizeof(int) * length);//分配内存
if(p == NULL)
{
printf("ERROR:memory allocation failure!\n");//内存分配失败
exit(-1); //终止程序
}
else
{
p->arrLength = length;
p->arrAcount = 0;
}
return ;
}
bool isEmpty(Array *p) //判断是否为空
{
if(p->arrAcount == 0)
return true;
else
return false;
}
bool isFull(Array *p) //是否已存满
{
if(p->arrLength == p->arrAcount)
return true;
else
return false;
}
void showArray(Array *p) //显示
{
int i = 0;
if(isEmpty(p))
printf("Warning :array is empty!\n");
else
{
for(i = 0; i < p->arrAcount; ++i )
{
printf("%d ",p->arrpBase[i]);
}
printf("\n");
}
}
bool appendArray(Array *p,int value) //追加
{
if(isFull(p))
return false;
//不满足时追加
p->arrpBase[p->arrAcount] = value;
p->arrAcount++;
return true;
}
bool insertArray(Array *p,int postion, int value) //插入,参数postin从1开时
{
int i = 0;
if(isFull(p))
return false;
//位置的判断
if(postion < 1 || postion > p->arrAcount + 1)
return false;
for(i = p->arrAcount - 1; i>= postion - 1; --i)
{
p->arrpBase[i+1] = p->arrpBase[i];
}
p->arrpBase[postion-1] = value;
p->arrAcount++;//个数加1
return true;
}
bool deleteArray(Array *p,int postion,int *pValue) //删除
{
int i = 0;
if(isEmpty(p))
return false;
if(postion<1 || postion > p->arrAcount)
return false;
*pValue = p->arrpBase[postion - 1];
for(i = postion; i< p->arrAcount; ++i)
{
p->arrpBase[i - 1] = p->arrpBase[i];
}
p->arrAcount--;
return true;
}
void inverArray(Array *p) //倒置
{
int temp = 0;
int i = 0;
int j = p->arrAcount - 1;
while(i < j)
{
temp = p->arrpBase[i];
p->arrpBase[i] = p->arrpBase[j];
p->arrpBase[j] = temp;
++i;
--j;
}
}
void sortArray(Array *p) //排序
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0; i < p->arrAcount; ++i )
{
for(j = i + 1; j < p->arrAcount; ++j)
{
if(p->arrpBase[i] > p->arrpBase[j])
{
temp = p->arrpBase[i];
p->arrpBase[i] = p->arrpBase[j];
p->arrpBase[j] = temp;
}
}
}
}
int findArrValue(Array *p,int value) //查找
{
int i = 0;
int val = 0;
if(isEmpty(p))
return -1;
for(i = 0; i < p->arrAcount; ++i )
{
if(p->arrpBase[i] == value)
val = i;
else
val = -1;
}
return val;
}