1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 struct Arr 6 { 7 int *pBase; //存儲數組第一個元素的地址 8 int len; //數組所能容納的最大元素個數 9 int cnt; //當前數組有效元素 10 }; 11 12 void init_arr(struct Arr * pArr,int length); 13 bool append_arr(struct Arr * pArr,int val); //追加 14 bool insert_arr(struct Arr * pArr,int pos,int val); 15 bool delet_arr(struct Arr * pArr,int pos,int *pVal); 16 bool is_empty(struct Arr * pArr); 17 bool is_full(struct Arr * pArr); 18 void sort_arr(struct Arr * pArr); 19 void show_arr(struct Arr * pArr); 20 void inversion_arr(struct Arr * pArr); 21 22 int main() 23 { 24 struct Arr arr; 25 int val; 26 27 printf("--------順序表初始化--------\n"); 28 init_arr(&arr,6); 29 show_arr(&arr); 30 printf("\n\n"); 31 32 printf("--------追加元素--------\n"); 33 append_arr(&arr,1); 34 append_arr(&arr,2); 35 append_arr(&arr,3); 36 append_arr(&arr,4); 37 append_arr(&arr,5); 38 show_arr(&arr); 39 printf("\n\n"); 40 41 printf("--------插入元素--------\n"); 42 insert_arr(&arr,6,99); 43 show_arr(&arr); 44 printf("\n\n"); 45 46 printf("--------刪除元素--------\n"); 47 if( delet_arr(&arr,1,&val) ) 48 { 49 printf("刪除成功!\n"); 50 printf("您刪除的元素是:%d\n",val); 51 } 52 else 53 { 54 printf("刪除失敗!\n"); 55 } 56 show_arr(&arr); 57 printf("\n\n"); 58 59 printf("--------倒置元素--------\n"); 60 inversion_arr(&arr); 61 printf("倒置以後的數組內容是:\n"); 62 show_arr(&arr); 63 printf("\n\n"); 64 65 printf("--------排序--------\n"); 66 sort_arr(&arr); 67 show_arr(&arr); 68 printf("\n\n"); 69 return 0; 70 } 71 72 void init_arr(struct Arr * pArr,int length) 73 { 74 pArr->pBase = (int *)malloc(sizeof(int) * length); 75 if(NULL == pArr->pBase) 76 { 77 printf("動態內存分配失敗!\n"); 78 exit(-1); //終止整個程序 79 } 80 else 81 { 82 pArr->len = length; 83 pArr->cnt = 0; 84 } 85 return; 86 } 87 88 bool is_empty(struct Arr * pArr) 89 { 90 if(0 == pArr->cnt) 91 return true; 92 else 93 return false; 94 } 95 96 bool is_full(struct Arr * pArr) 97 { 98 if(pArr->cnt == pArr->len) 99 return true; 100 else 101 return false; 102 } 103 104 void show_arr(struct Arr * pArr) 105 { 106 if( is_empty(pArr) ) 107 { 108 printf("數組爲空!\n"); 109 } 110 else 111 { 112 for(int i=0;i<pArr->cnt;i++) 113 printf("%d ",pArr->pBase[i]); 114 printf("\n"); 115 } 116 } 117 118 bool append_arr(struct Arr * pArr,int val) 119 { 120 //盡是返回false 121 if( is_full(pArr) ) 122 return false; 123 pArr->pBase[pArr->cnt] = val; 124 pArr->cnt++; 125 return true; 126 } 127 128 bool insert_arr(struct Arr * pArr,int pos,int val) 129 { 130 131 if(is_empty(pArr) ) 132 return false; 133 if(pos<1 || pos>pArr->len) 134 return false; 135 for(int i=pArr->cnt-1;i>=pos-1;--i) 136 { 137 pArr->pBase[i+1] = pArr->pBase[i]; 138 } 139 pArr->pBase[pos-1] = val; 140 (pArr->cnt)++; 141 return true; 142 } 143 144 bool delet_arr(struct Arr * pArr,int pos,int *pVal) 145 { 146 if( is_empty(pArr) ) 147 return false; 148 if(pos<1 || pos>pArr->cnt) 149 return false; 150 *pVal = pArr->pBase[pos-1]; 151 for(int i=pos;i<pArr->cnt;++i) 152 { 153 pArr->pBase[i-1] = pArr->pBase[i]; 154 } 155 pArr->cnt--; 156 return true; 157 } 158 159 void inversion_arr(struct Arr * pArr) 160 { 161 int i = 0; 162 int j = pArr->cnt-1; 163 int t; 164 while(i<j) 165 { 166 t = pArr->pBase[i]; 167 pArr->pBase[i] = pArr->pBase[j]; 168 pArr->pBase[j] = t; 169 ++i; 170 --j; 171 } 172 return; 173 } 174 175 void sort_arr(struct Arr * pArr) 176 { 177 int i,j,t; 178 for(i=0;i< pArr->cnt ;++i) 179 { 180 for(j=i+1;i< pArr->cnt ;++j) 181 { 182 if(pArr->pBase[i] > pArr->pBase[j]) 183 { 184 t = pArr->pBase[i]; 185 pArr->pBase[i] = pArr->pBase[j]; 186 pArr->pBase[j] = t; 187 } 188 } 189 } 190 }