1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct Arr 5 { 6 int * pBase;//存储的是数组的第一个元素的 地址 7 int len;//数组所能容纳的最大元素的个数 8 int cnt; //当前数组有效元素的个数 9 //int increment; //自动增长因子 10 }; 11 void init_arr( struct Arr * pArr, int length); 12 bool append_arr(struct Arr *pArr, int val);//追加 13 bool insert_arr(struct Arr *pArr, int pos , int val); 14 bool delete_arr(struct Arr *pArr, int pos , int *pVal); 15 int get(); 16 bool is_empty(struct Arr*); 17 bool is_full(struct Arr*); 18 void sort_arr(); 19 void show_arr(struct Arr*); 20 void inversion_arr(struct Arr *pArr); 21 22 23 int main(void) 24 { 25 struct Arr arr; 26 int val; 27 28 init_arr(&arr,6); 29 30 append_arr(&arr,1); 31 append_arr(&arr,2); 32 append_arr(&arr,3); 33 append_arr(&arr,4); 34 append_arr(&arr,5); 35 insert_arr(&arr,1,99); 36 37 if(delete_arr(&arr,1,&val)) 38 { 39 printf("删除成功!\n"); 40 printf("您删除的元素是:%d\n",val); 41 } 42 else 43 { 44 printf("删除失败!\n"); 45 } 46 show_arr(&arr); 47 sort_arr(&arr); //选择排序 48 49 50 51 52 return 0; 53 } 54 void init_arr(struct Arr *pArr,int length) 55 { 56 pArr->pBase =(int *)malloc(sizeof(struct Arr)*length);//申请length个连续空间 来存放array的所有地址 57 if(NULL ==pArr->pBase) 58 { 59 printf("动态内存分配失败\n"); 60 exit(-1); //终止整个程序 61 } 62 else 63 { 64 pArr->len = length; 65 pArr->cnt = 0; 66 } 67 return; 68 } 69 void show_arr(struct Arr *pArr) 70 { 71 if(is_empty(pArr)) 72 { 73 printf("数组为空!\n"); 74 } 75 else 76 { 77 for(int i = 0; i<pArr->cnt;i++) 78 { 79 printf("arr[%d] =%d ",i, pArr->pBase[i]);//或者 *((pArr->pBase)+i) 80 printf("\n"); 81 } 82 } 83 } 84 bool is_empty(struct Arr *pArr) 85 { 86 return (pArr->cnt)? 0:1; 87 } 88 89 bool is_full(struct Arr* pArr) 90 { 91 return (pArr->cnt == pArr->len)? 1:0; 92 } 93 bool append_arr(struct Arr *pArr, int val) 94 { 95 if(is_full(pArr)) 96 { 97 return false; 98 } 99 else 100 { 101 pArr->pBase[pArr->cnt]=val; //*(pArr->pBase +pArr->cnt) = val; 102 pArr->cnt ++; 103 return true; 104 } 105 } 106 bool insert_arr(struct Arr *pArr, int pos , int val) 107 { 108 if(is_full(pArr)) 109 return false; 110 if(pos<1 ||pos>pArr->cnt+1) 111 return false; 112 else 113 { 114 int i; 115 for(i = pArr->cnt-1 ;i>=pos-1;--i) 116 { 117 pArr ->pBase[i+1] = pArr->pBase[i]; 118 } 119 pArr->pBase[pos-1] = val; 120 pArr->cnt++; 121 return true; 122 } 123 } 124 bool delete_arr(struct Arr *pArr, int pos ,int *pVal) 125 { 126 127 int i; 128 if(is_empty(pArr)) 129 return false; 130 if(pos<1||pos > pArr->cnt) 131 return false; 132 *pVal = pArr->pBase[pos-1]; 133 for(i = pos ; i<pArr->cnt ;++i) 134 { 135 pArr->pBase[i-1] = pArr->pBase[i]; 136 } 137 return true; 138 } 139 void inversion_arr(struct Arr *pArr) 140 { 141 int i=0; 142 int j = pArr->cnt-1; 143 int t; 144 while(i<j) 145 { 146 t = pArr->pBase[i]; 147 pArr->pBase[i] = pArr->pBase[j]; 148 pArr->pBase[j]=t; 149 i++; 150 j--; 151 } 152 } 153 154 155 void sort_arr(struct Arr*pArr) 156 { 157 int i,j,t; 158 for(i = 0;i<pArr->cnt;++i) 159 { 160 for(j =i+1;j<pArr->cnt;++j) 161 { 162 if(pArr->pBase[i]>pArr->pBase[j]) 163 { 164 t = pArr->pBase[i]; 165 pArr->pBase[i] = pArr->pBase[j]; 166 pArr->pBase[j]=t; 167 } 168 } 169 } 170 }