数组的初始化,判断是否为空,判断是否已满,输出数组,追加,删除,插入,倒置,排序
//p12,p13视频
//数组的初始化,判断是否为空,判断是否已满,输出数组,追加,删除,插入,倒置,排序
#include<stdio.h>
#include<malloc.h>//包含了malloc函数
#include<stdlib.h>//包含了exit函数
struct arr{
int len;//数组所能容纳的最大元素个数
int cnt;//当前数组有效元素的个数
int *pBase;//储存的是数组第一个元素的地址
};
//初始化数组
void init_arr(struct arr *pArr,int length){
pArr->pBase=(int *)malloc(sizeof(int)*length);
if(pArr->pBase==NULL){
printf("动态内存分配失败\n") ;
exit(-1);//终止整个程序
}else{
(*pArr).len=length;
pArr->cnt=0;
}
return;
}
//判断数组是否为空
bool is_empty(struct arr *pArr){
if(pArr->cnt==0)
return true;
else
return false;
}
//判断数组是否已满
bool is_full(struct arr *pArr){
if(pArr->cnt==pArr->len)
return true;
else
return false;
}
//输出数组
void show_arr(struct arr *pArr){
if(is_empty(pArr))
printf("数组为空\n");
else {
for(int i=0;i<pArr->cnt;i++)
printf("%d ",pArr->pBase[i]);
printf("\n");
}
}
//追加
bool append_arr(struct arr *pArr,int val){
if(is_full(pArr))
return false;
else{
pArr->pBase[pArr->cnt++]=val;
return true;
}
}
//插入 //将val插在数组中第pos的位置
bool insert_arr(struct arr *pArr,int pos,int val){
if(is_full(pArr))
return false;
if(pos<1||pos>pArr->cnt+1)
return false;
for(int i=pArr->cnt-1;i>=pos-1;i--)
pArr->pBase[i+1]=pArr->pBase[i];
pArr->pBase[pos-1]=val;
pArr->cnt++;
return true;
}
//删除 //删除数组中第pos位置的元素
bool delete_arr(struct arr *pArr,int pos,int *pVal){
if(is_empty(pArr))
return false;
if(pos<1||pos>pArr->cnt)
return false;
*pVal=pArr->pBase[pos-1];
int i;
for(i=pos-1;i<pArr->cnt;i++)
pArr->pBase[i]=pArr->pBase[i+1];
pArr->cnt--;
return true;
}
//倒置
void inversion_arr(struct arr *pArr){
int i=0,j=pArr->cnt-1,t;
while(i<j){
t=pArr->pBase[i];
pArr->pBase[i]=pArr->pBase[j];
pArr->pBase[j]=t;
++i;
--j;
}
return;
}
//排序(从小到大)
void sort_arr(struct arr *pArr){
int i,j,t;
for(i=pArr->cnt-1;i>0;i--){ //(冒泡)
for(j=0;j<=i;j++){
if(pArr->pBase[j]>pArr->pBase[j+1]){
t=pArr->pBase[j];
pArr->pBase[j]=pArr->pBase[j+1];
pArr->pBase[j+1]=t;
}
}
}
}
int main()
{
int val;
struct arr Arr;
init_arr(&Arr,9);
append_arr(&Arr,1);
append_arr(&Arr,2);
append_arr(&Arr,3);
insert_arr(&Arr,2,88);
delete_arr(&Arr,6,&val);
show_arr(&Arr);
inversion_arr(&Arr);
show_arr(&Arr);
sort_arr(&Arr);
show_arr(&Arr);
printf("%d",&Arr->cnt);
}