# include<stdio.h> # include<malloc.h> # include<stdlib.h> struct Arr { int *pBase;//存储的是数组第一个元素的地址 int len;//数组所能容纳的最大元素的个数 int cnt;//当前数组有效元素的个数 }; void init_arr(struct Arr *pArr,int length); bool append_arr(struct Arr *pArr,int value); bool insert_arr(struct Arr *pArr,int pos,int value); 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 inversion_arr(struct Arr *pArr); int main(void) { struct Arr arr; int val; arr.len=5; init_arr(&arr,arr.len); show_arr(&arr); append_arr(&arr,1); show_arr(&arr); delete_arr(&arr,1,&val); return 0; } void init_arr(struct Arr *pArr,int length) { pArr->pBase=(int *)malloc(sizeof(int)*length); if(pArr->pBase=NULL) { printf("动态内存分配失败"); 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) { int i; if(is_empty(pArr))//为什么不是&pArr,因为pArr本身就是地址了 { printf("数组为空 "); } else { for(i=0;i<pArr->cnt;i++) { printf("%d ",pArr->pBase[i]); } } } bool append_arr(struct Arr *pArr,int value) { if(is_full(pArr)) { return false; } else { pArr->pBase[pArr->cnt]=value; (pArr->cnt)++; return true; } } bool insert_arr(struct Arr *pArr,int pos,int value) { int i; if(is_full(pArr)) return false; if(pos<1 || pos>pArr->cnt+1) return false; for(i=pArr->cnt-1;i>=pos-1;i--) { pArr->pBase[i+1]=pArr->pBase[i]; } pArr->pBase[pos-1]=value; (pArr->cnt)++; return true; } bool delete_arr(struct Arr *pArr,int pos,int *pVal) { int i; if( is_empty(pArr)) return false; if(pos<1 || pos>pArr->cnt) return false; *pVal=pArr->pBase[pos-1]; for(i=pos;i<pArr->cnt;i++) { pArr->pBase[i-1]=pArr->pBase[i]; } (pArr->cnt)--; } void inversion_arr(struct Arr *pArr) { int i; int j=pArr->cnt-1; int 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=0;i<pArr->cnt;i++) { for(j=i+1;j<pArr->cnt;j++) { if(pArr->pBase[i]>pArr->pBase[j]) { t=pArr->pBase[i]; pArr->pBase[i]=pArr->pBase[j]; pArr->pBase[j]=t; } } } }